Frederick Cheung wrote:
> On May 10, 6:35�am, 7stud -- <rails-mailing-l...@andreas-s.net> wrote:
>> random_name can be accessed in the partial _random_name.html.erb. �In
>> addition, my tests show that @var can be accessed in
>> _random_name.html.erb as well. �I'm not sure why you would want to stuff
>> the value of @var into another variable when you can just access @var
>> directly. �Switching the names seems confusing to me.
>>
> 
> because depending on the state of local variables makes your partial
> more dependant on its environment. For example if the random_name
> partial always used @var you couldn't use it to render a collection or
> if the thing that you wanted to render was @something.something_else.
> Personally I mostly equate this to 'why use method arguments when you
> could just use global variables?'
> 

Ah.  I see.

AGoofin wrote:
> Perhaps you should look at the whole of DHH wrote. It is perhaps
> something like: render :partial => 'test' or has a :test => @var
> clause to give the test variable.
> 

This is what he wrote:

----
The :object parameter to render takes an object that is assigned to a 
local variable with the same name as the partial.  So, in the layout we 
could call this:

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

and in the _cart.html.erb template, we can refer to the cart via the 
variable cart.

p. 120, AWDWR(3rd)
-------------

My tests show that the :partial name can be anything, e.g. 
"forrest_gump", and then inside the file _forrest_gump.html.erb, a 
variable named forrest_gump will be available and it will be assigned 
whatever value is specified for :object.

In addition, my tests show that *all* the @variables that are set in the 
controller are available in the partial file no matter what I write in 
the render() statement.  Therefore, a statement such as this:

> For example, render :partial => 'foo' passes the instance variable
> named @foo to  the partial where I can then say: for f in @foo.

does not suddenly make @foo available in the partial.  @foo is also 
available in the partial already.  For instance, if I write:

render :partial => "red"

I can still access @foo in the file _red.html.erb.


> The code you posted doesn't contain any variable named test, otherwise
> you wouldn't get the error in the first place.
> 

I explained why I got the error.  It was because I ended  up with two 
conflicting render statements, one in the layout and one in the index 
view:

render(:partial => "some_name", :object => @var)
render(:partial => "some_name", :collection => @var)

Apparently, that confused rails.  The error had nothing to do with the 
fact that 'test' wasn't previously defined somewhere in my code.


> If you don't want help - why post here?
>

Don't get offended just because a beginner can't confirm how you say 
rails works.  I don't blindly accept what someone says.  I test things 
out to see how they work for myself.  If my test results don't confirm 
what I've been told, then I ask questions.

> Variable names are special - they don't just appear and have to be created.

Is it so hard to believe that rails could create a variable when given a 
string, like here:

partial => "forrest_gump"

I can do it:

class A
end

a = A.new
str = "forrest_gump"
val = [1, 2, 3]

a.instance_variable_set("@#{str}", val)

eval("
  class << a
    attr_accessor :#{str}
  end")

p a.forrest_gump

--output:--
[1, 2, 3]


I don't know if things work differently in rails 2.3.2, which is what I 
am using.

-- 
Posted via http://www.ruby-forum.com/.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to