rails link_to form_for button_to ruby-on-rails link-to

ruby on rails - form_for - link_to: action=> ''create'' va al índice en lugar de ''create''



rails link_to class (2)

Estoy creando una aplicación de recetas bastante simple para aprender RoR, y estoy tratando de permitir que un usuario guarde una receta haciendo clic en un enlace en lugar de hacerlo a través de un formulario, por lo que estoy conectando la función "crear" de los controladores user_recipe a través de link_to.

Desafortunadamente, por alguna razón, link_to está llamando a la función de índice en lugar de a crear.

He escrito el link_to como

<%= "save this recipe", :action => ''create'', :recipe_id => @recipe %>

este enlace está en user_recipes / index.html.erb y está llamando a la función "crear" del mismo controlador. No parece hacer una diferencia si incluyo el: controlador o no.

Los controladores se ven así

def index @recipe = params[:recipe_id] @user_recipes = UserRecipes.all # change to find when more than one user in db respond_to do |format| format.html #index.html.erb format.xml { render :xml => @recipes } end end def create @user_recipe = UserRecipe.new @user_recipe.recipe_id = params[:recipe_id] @user_recipe.user_id = current_user respond_to do |format| if @menu_recipe.save format.html { redirect_to(r, :notice => ''Menu was successfully created.'') } format.xml { render :xml => @menu, :status => :created, :location => @menu } else format.html { render :action => "new" } format.xml { render :xml => @menu.errors, :status => :unprocessable_entity } end end


Suponiendo que tiene recursos predeterminados configurados en su archivo de rutas, es decir, algo como esto

resources :recipes

Lo siguiente generará un enlace que creará una receta; Es decir, se dirigirá a la acción de crear.

<%= link_to "Create Recipe", recipes_path, :method => :post %>

Para que esto funcione, JS debe estar habilitado en su navegador.

Lo siguiente generará un enlace que mostrará todas las recetas; Es decir, se dirigirá a la acción de índice.

<%= link_to "All Recipes", recipes_path %>

Esto supone el valor predeterminado que es una solicitud Obtener HTTP.


En el esquema REST estándar, la acción de índice y la acción de crear tienen la misma url ( /recipes ) y solo difieren en que se accede al índice mediante GET y se accede a la creación mediante POST. Por lo tanto, link_to :action => :create simplemente generará un enlace a /recipes que hará que el navegador realice una solicitud GET para /recipes cuando se haga clic y, por lo tanto, invoque la acción de índice.

Para invocar la acción de creación, use link_to {:action => :create}, :method => :post link_to link_to {:action => :create}, :method => :post , indicando a link_to explícitamente que desea una solicitud de publicación, o use un formulario con un botón de envío en lugar de un enlace.