Partials: what variable name should you use?


#1

Here’s a call to a partial:

<%= render(:partial => “cart”, :object => @cart) %>

As far as I know, that statement causes a variable to be created called
‘cart’ that is available to the partial, and whose value is @cart. In
addition, the file that contains the partial must be named
_cart.html.erb.

In the partial file _cart.html.erb, you can then do something like this:

<%= number_to_currency(cart.total_price) %>

However, I made a mistake, and I wrote @cart instead of cart:

<%= number_to_currency(@cart.total_price) %>

and rails didn’t complain. So, which variable name should you use? To
me it seems much clearer to use @cart. It highlights the links between
the various files and makes it easier to know where the cart/@cart value
came from.


#2

7stud – wrote:

and rails didn’t complain. So, which variable name should you use? To
me it seems much clearer to use @cart. It highlights the links between
the various files and makes it easier to know where the cart/@cart value
came from.
From my understanding the instance variable assigned in the controller
already available to the partials.

<%= number_to_currency(@cart.total_price) %>

So doing this is accessing the instance variable @cart and not the local
variable cart.

<%= render(:partial => “cart”, :object => @cart) %>
The way I understand this syntax is that the value of @cart will be made
available in the partial as a local variable cart.

Imaging you had this instead:
<%= render(:partial => “cart”, :object => @some_cart) %>

In this case the local variable for the partial would still be cart.
Taken from :partial => “cart” and from :object => @some_cart. However,
@some_cart would still be accessible from inside the partial because the
partials can see all the instance variable assigned in the controller.


#3

Robert W. wrote:

In this case the local variable for the partial would still be cart.
Taken from :partial => “cart” and from :object => @some_cart. However,
@some_cart would still be accessible from inside the partial because the
partials can see all the instance variable assigned in the controller.

Correction: and NOT from :object => …