Sto costruendo un'app di ricette abbastanza semplice per imparare RoR, e sto tentando di consentire a un utente di salvare una ricetta facendo clic su un link piuttosto che attraverso un modulo, quindi sto collegando la funzione 'create' dei controller user_recipe attraverso un link_to.link_to: action => 'create' vai all'indice piuttosto che 'crea'
Sfortunatamente, per qualche motivo il link_to chiama la funzione indice piuttosto che il comando di creazione.
ho scritto il link_to come
<%= "save this recipe", :action => 'create', :recipe_id => @recipe %>
questo link è sul user_recipes/index.html.erb ed è chiamare la funzione 'creare' dello stesso controller. Non sembra fare la differenza se includo il: controller o meno.
I controller simile a questa
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
Grazie a Sepp2k, non solo per fornire la risposta, ma spiegando il perché così chiaramente. È una cosa che faccio davvero fatica a capire perché i binari fanno o si aspettano determinati bit, e spesso le risposte online danno solo il "questo è come è fatto" senza il perché. La tua risposta è stata perfetta! – pedalpete
'link_to {: action =>: create},: method =>: post' crea un collegamento con l'attributo' data-method = "POST" '. Che viene utilizzato dal rails javascript per creare un modulo discreto e pubblicarlo. I collegamenti stessi non possono essere utilizzati per inviare qualcosa di diverso dalle richieste GET, che è ciò che accade quando il JS fallisce. – max