Hi -- On Thu, 2 Nov 2006, ara.t.howard / noaa.gov wrote: > On Thu, 2 Nov 2006 dblack / wobblini.net wrote: > >> It was recently noted on the Rails mailing list that something like >> that happens in ActiveRecord. Given Person and Address models, where >> Person has_one Address: >> >> a = person.address >> person.address = Address.find(some_other_address) >> puts a # a has changed! >> >> I find it un-Rubyish and disconcerting (though I'm still waiting for >> someone to explain the rationale; there may be something I'm missing). > > can you show an example? are you saying that activerecord avoids apparent > copy-on-write semantics with some trickery? Here's an example from a program which models Ideas; each Idea belongs to a Page. >> i = Idea.find(6) => #<Idea:0xb79eec2c @attributes={"page_id"=>"6", "id"=>"6", "content"=>"Go to Paris"}> # Save the idea's page in p >> p = i.page => #<Page:0xb79e4a88 @attributes={"scratchpad_id"=>"6", "title"=>"Domestic travel", "id"=>"6"}> # Change the idea's page to a different one >> i.page = Page.find(7) => #<Page:0xb79d1b18 @attributes={"scratchpad_id"=>"1", "title"=>"Foreign travel", "id"=>"7"}> # Examine the saved page -- it's the new one >> p => #<Page:0xb79d1b18 @attributes={"scratchpad_id"=>"1", "title"=>"Foreign travel", "id"=>"7"}> I don't know the rationale. When I (think I'm) assign(ing) an object to a variable, I really don't want it to turn out that it's some special arrangement whereby the variable is subject to reassignment without notice. I expect: p = i.page to be exactly equivalent to: p = Idea.find(i.page.id) with respect to p. David -- David A. Black | dblack / wobblini.net Author of "Ruby for Rails" [1] | Ruby/Rails training & consultancy [3] DABlog (DAB's Weblog) [2] | Co-director, Ruby Central, Inc. [4] [1] http://www.manning.com/black | [3] http://www.rubypowerandlight.com [2] http://dablog.rubypal.com | [4] http://www.rubycentral.org