Подтвердить что ты не робот

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, которое не существует и не должно существовать.

4b9b3361

Ответ 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 %>