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.