Buduję dość prostą aplikację na receptę, aby poznać RoR, i staram się zezwolić użytkownikowi na zapisanie receptury przez kliknięcie łącza zamiast przez formularz, więc łączę funkcję 'create' kontrolerów user_recipe poprzez link_to.link_to: action => 'create' przechodząc do indeksu zamiast "tworzyć"
Niestety, z jakiegoś powodu link_to wywołuje funkcję indeksu zamiast tworzenia.
Pisałem o link_to jak
<%= "save this recipe", :action => 'create', :recipe_id => @recipe %>
Ten link jest na user_recipes/index.html.erb i woła „Utwórz” funkcję tego samego kontrolera. Wydaje się, że nie ma to znaczenia, jeśli dołączę: kontroler lub nie.
Regulatory wyglądać następująco
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
Dziękuję Sepp2k, nie tylko za udzielenie odpowiedzi, ale wyjaśnienie, dlaczego tak wyraźnie. Jest to coś, z czym naprawdę walczę ze zrozumieniem, dlaczego szyny mają lub oczekują pewnych bitów, a często odpowiedzi w Internecie dają tylko "tak to się robi" bez przyczyny. Twoja odpowiedź była doskonała! – pedalpete
'link_to {: action =>: create},: method =>: post' tworzy łącze z atrybutem' data-method = "POST" '. Który jest używany przez javascript szyn, aby utworzyć dyskretną formę i opublikować ją. Odsyłacze nie mogą być używane do wysyłania niczego poza żądaniami GET, co ma miejsce w przypadku niepowodzenia JS. – max