Estoy construyendo una aplicación de receta bastante simple para aprender RoR, y estoy tratando de permitir que un usuario guarde una receta haciendo clic en un enlace en lugar de un formulario, así que estoy conectando la función 'create' de los controladores de receta de usuario a través de un link_to.link_to: action => 'create' yendo al índice en lugar de 'crear'
Desafortunadamente, por alguna razón el link_to está llamando a la función de índice en lugar de a la creación.
He escrito el link_to como
<%= "save this recipe", :action => 'create', :recipe_id => @recipe %>
este enlace se encuentra en la user_recipes/index.html.erb y está llamando a la función 'crear' del mismo controlador. No parece marcar la 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
Gracias Sepp2k, no solo por proporcionar la respuesta, sino por explicar el porqué de manera tan clara. Es algo que realmente me cuesta comprender por qué los rieles tienen o esperan ciertos bits, y con frecuencia las respuestas en línea solo dan el 'así es como se hace' sin el por qué. ¡Tu respuesta fue perfecta! – pedalpete
'link_to {: action =>: create},: method =>: post' crea un enlace con el atributo' data-method = "POST" '. El cual es utilizado por los rails javascript para crear un formulario discreto y publicarlo. Los enlaces en sí no pueden utilizarse para enviar nada más que solicitudes GET, que es lo que sucede cuando falla el JS. – max