Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

button_to :action => 'destroy' looks for 'show'

This seems incredibly similar to a question I had answered just a few days ago, but the solution then isn't working now.

I'm building a rails app, and I am trying to have a button_to trigger a destroy in a different controller.

the code I have for the button is

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

when I click the delete button, i get a 'no matches for meals/3' which is the current meal_id.

the destroy in the meals controller looks like this

  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

it appears as though the button_to is completely ignoring the :action and requesting show which does not exist and shouldn't exist.

like image 215
pedalpete Avatar asked Sep 21 '10 17:09

pedalpete


2 Answers

And how you part of routes.rb for that one looks like? Because if you use map.resources then destroy has same path as show but :method => :delete(which is virtual verb implemented by form and _method=delete param).

Try this:

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

or if recipe is instance of Meal class then

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

Mind the curly brackets.

like image 56
gertas Avatar answered Dec 26 '22 06:12

gertas


I know it is way too late for an answer but hope it may help somebody(using Rails 4).

 <%= button_to "delete", meal_path(:id => recipe.id), :method => :delete %>
like image 44
Sasi_Kala Avatar answered Dec 26 '22 05:12

Sasi_Kala