2010-09-21 60 views
18

這似乎與我前幾天剛剛回答的問題非常相似,但是現在解決方案並未奏效。button_to:action =>'destroy'尋找'show'

我正在構建一個rails應用程序,並且我試圖在不同的控制器中使用button_to觸發一個銷燬。

我對按鈕的代碼是

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

當我點擊刪除按鈕,我得到一個 這是當前meal_id「不吃飯/ 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完全無視

:行動,並請求顯示不存在,不應該存在。

+0

您使用哪個導軌版本? – shingara 2010-09-21 18:09:55

+0

我正在使用rails3 – pedalpete 2010-09-21 18:16:49

回答

35

你是如何看待那個routes.rb的一部分? 因爲如果你使用map.resources,那麼destroy與show有相同的路徑,但是:method => :delete(這是由form和_method = delete param實現的虛擬動詞)。

試試這個:

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

,或者如果recipeMeal類,然後

<%= button_to "delete", @recipe, :method => :delete %> 

心靈的大括號的實例。

+0

我不完全確定你在說什麼。我的路線是「資源:餐」。我改變了:method =>:post::method =>:delete但是由於某種原因,現在指向創建 – pedalpete 2010-09-21 18:19:46

+0

如果yoyu有資源:用餐,那麼':id'是預期的路線,而不是':recipe_id'。只需運行'rake routes'即可查看註冊的路線。 – gertas 2010-09-22 08:24:53

+0

我從button_to中刪除了recipe_id,但我仍然得到了相同的No Route Matches「/ meals/3」錯誤。我跑耙路線,我的膳食路線有「膳食刪除/meals/:id(.:format){:action =>」摧毀「,:控制器=>」膳食「}。我的button_to形式的行動是」飯/ 3 「方法=刪除」,這對我來說似乎是對的 – pedalpete 2010-09-22 17:49:53

10

我知道答案太晚了,但希望它可以幫助某人(使用Rails 4)。

<%= button_to "delete", meal_path(:id => recipe.id), :method => :delete %>