button_to:action =>'destroy'查找'show'

ped*_*ete 20 ruby-on-rails

这似乎与我几天前回答的问题非常相似,但解决方案现在还没有奏效.

我正在构建一个rails应用程序,我正在尝试使用button_to在不同的控制器中触发destroy.

我对按钮的代码是

<%= button_to "delete", :controller => :meals, 
                           :action => 'destroy',
                           :recipe_id => recipe.id,
                           :method => :post >

当我点击删除按钮时,我得到一个'不匹配饭/ 3',这是当前的meal_id.

膳食控制器中的破坏看起来像这样

  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不存在且不应该存在.

ger*_*tas 42

你是如何将routes.rb的一部分看起来的?因为如果你使用map.resources然后destroy有与show相同的路径但是:method => :delete(这是由form和_method = delete param实现的虚拟动词).

试试这个:

<%= button_to "delete", {:controller => :meals,
      :action => 'destroy', :id => recipe.id }, :method => :delete %>
Run Code Online (Sandbox Code Playgroud)

或者如果recipeMeal类的实例那么

<%= button_to "delete", @recipe, :method => :delete %>
Run Code Online (Sandbox Code Playgroud)

注意大括号.


Sas*_*ala 11

我知道答案为时已晚,但希望它可以帮助某人(使用Rails 4).

 <%= button_to "delete", meal_path(:id => recipe.id), :method => :delete %>
Run Code Online (Sandbox Code Playgroud)