2010-04-23 15 views
17

¿Cómo llamaría correctamente la acción create desde un link_to? Estoy usando REST (map.resources: recetas). Aquí está la acción create:Ruby on Rails: ¿Puedo hacer un "link_to" para llamar a una acción de crear?

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

Por ejemplo, pensé que algo como esto podría funcionar:

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

No estoy seguro de si eso es una forma recomendada (o incluso corregir) para hacerlo. ¿Alguna idea?

Respuesta

28

Eso debería funcionar si sustituye recipes_path por recipe_path.

Si nos fijamos en la salida del rake routes, debería ver algo como:

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

Eso es un indicio de que el ayudante de dirección URL ("recipes_path"), por la acción create se compone del nombre del controlador con _path pegado en el extremo, usando :method => :post. La misma ruta usando :method => :get (que es el valor predeterminado) se asigna a la acción index.

Recuerde que esto no funcionará si JavaScript está deshabilitado, porque Rails realmente está agregando un controlador on_click que crea un formulario para hacer el POST. Lo mismo aplica para eliminar enlaces con la opción :confirm.

+0

apreciamos tu agradable explicación zetetic! ¡Muchas gracias! :) – sjsc

Cuestiones relacionadas