Pregunta

Many helper methods, such as redirect_to, link_to, and url_for, can take an ActiveRecord object as a parameter instead of a hash that specifies the controller and action. I've seen the parameter passed different ways in different documentation. It sometimes gets passed as a symbol, sometimes as an instance variable, and sometimes as a local variable.

I'm confused about how the different parameter styles get expanded to return urls. I know that following REST conventions should create a url constructed of a controller and action but am unsure when Rails needs a specific parameter style to construct that url. Please help me understand the use cases for passing the ActiveRecord object as a symbol, an instance variable, or a local variable. Are there different requirements based on the method call? Or are there underlying differences in url construction?

Here are some examples:

From the API docs:

link_to "Profile", @profile  
redirect_to post  
<%= url_for(@workshop) %>  
<%= form_for :person do |f| %> (this is described as the “generic #form_for”)

From the Ruby on Rails Guides:

<%= link_to 'New book', new_book_path %>  
redirect_to(@book)  
form_for(@article)  

From the Rails 3 Way:

'link_to' "Help", help_widgets_path, :popup => 1  
redirect_to post  
url_for(timesheets_path)  
form_for offer do |f|  

Note: Upon further research, it seems that form_for is able to accept a local variable in the case where the calling view template passes a :locals hash as a parameter. The keys are the locals that can be used in the partial and the values are the instance variables from the template. Is that the correct understanding?

¿Fue útil?

Solución

  • You can pass objects to link_to and url_for
  • You can also pass an object to a path helper
  • Both @post and post are objects. @post is an instance variable, and post is either a local variable or a method that will return a post

The only "weird" one is the form_for :post variety. This is old school Rails syntax, and will change this to the form_for @post syntax under the hood.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top