Button_to: action => 'destroy' ищет 'show'
Это кажется невероятно похожим на вопрос, на который я ответил всего несколько дней назад, но решение теперь не работает.
Я создаю приложение rails, и я пытаюсь запустить кнопку button_ для запуска в другом контроллере.
код, который у меня есть для кнопки
<%= 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 и requesting, которое не существует и не должно существовать.
Ответы
Ответ 1
И как вы относитесь к route.rb для этого?
Потому что, если вы используете map.resources, тогда destroy имеет тот же путь, что и show, но :method => :delete
(который является виртуальным глаголом, реализованным по форме и _method = delete param).
Попробуйте следующее:
<%= button_to "delete", {:controller => :meals,
:action => 'destroy', :id => recipe.id }, :method => :delete %>
или если recipe
является экземпляром класса Meal
, то
<%= button_to "delete", @recipe, :method => :delete %>
Обратите внимание на фигурные скобки.
Ответ 2
Я знаю, что слишком поздно для ответа, но надеюсь, что это может помочь кому-то (используя Rails 4).
<%= button_to "delete", meal_path(:id => recipe.id), :method => :delete %>