views:

122

answers:

1

How would I correctly call the create action from a link_to? I'm using REST (map.resources :recipes). Here's the create action:

def create
  recipe = Recipe.create(:name => "French fries")
  redirect_to recipe
end

For example, I thought something like this might work:

<%= link_to "Create a default recipe", recipe_path, :method => :post %>

I'm not sure if that's a recommended (or even correct) way to do it. Any idea?

+4  A: 

That should work if you substitute recipes_path for recipe_path.

If you look at the output of rake routes, you should see something like:

recipes GET /recipes(.:format) {:controller=>"recipes", :action=>"index"}
        POST /recipes(.:format) {:controller=>"recipes", :action=>"create"}

That's a clue that the URL helper ("recipes_path"), for the create action is made up from the controller name with _path tacked on the end, using :method => :post. The same path using :method => :get (which is the default) maps to the index action.

Remember this won't work if Javascript is disabled, because Rails is actually adding an on_click handler that creates a form to do the POST. Same goes for delete links with the :confirm option.

zetetic
appreciate your nice explanation zetetic! thank you so much! :)
sjsc