这似乎与我几天前回答的一个问题非常类似,但现在解决方案不起作用。
我正在构建一个rails应用程序,我正在尝试使用button_to在不同的控制器中触发destroy。
按钮的代码是
<%= button_to "delete", :controller => :meals, :action => 'destroy', :recipe_id => recipe.id, :method => :post >
当我点击删除按钮时,我得到一个 '没有匹配的饭菜/ 3'这是当前的饭菜。
饭菜控制器中的破坏看起来像这样def destroy @meal = Meal.where("current_user.id => ? AND recipe_id => ?", current_user.id, params[:recipe_id]).first @meal.destroy respond_to do |format| format.html { redirect_to :controller => "user" , :action => "show" } format.xml { head :ok } end end
似乎button_to完全忽略了:action并请求show不存在且不应该存在。
答案 0 :(得分:41)
你是如何将routes.rb的一部分看起来像?
因为如果你使用map.resources,那么destroy的路径与show相同,但是:method => :delete
(这是由form和_method = delete param实现的虚拟动词)。
试试这个:
<%= button_to "delete", {:controller => :meals,
:action => 'destroy', :id => recipe.id }, :method => :delete %>
或者如果recipe
是Meal
类的实例,那么
<%= button_to "delete", @recipe, :method => :delete %>
注意大括号。
答案 1 :(得分:11)
我知道答案为时已晚,但希望它可以帮助某人(使用Rails 4)。
<%= button_to "delete", meal_path(:id => recipe.id), :method => :delete %>