One way to dynamically add attributes to some model object on the fly
is to just directly add the new key(s)/val(s) to the model instance's
attributes:
$ ./script/console
Loading development environment (Rails 2.2.2)
>> test = Test.find(:first)
=> #<Test id: 1, name: "Abe">
>> test.attributes.keys
=> ["id", "name"]
>> test["favorite_color"] = 'blue'
=> "blue"
>> test.attributes.keys
=> ["id", "favorite_color", "name"]
>> test.favorite_color
=> "blue"
Another way, assuming the purpose is to add additional attribs coming
from a db qry, ... Note that any additional attribs returned from a
db query will be automatically added to the returned model ob(s):
>> test2 = Test.find_by_sql("select *, 'blue' as favorite_color from tests order by id limit 1").first
=> #<Test id: 1, name: "Abe">
>> test2.attributes.keys
=> ["id", "favorite_color", "name"]
>> test2.favorite_color
=> "blue"
Note that neither of the above requires any accessor-related code in
your model ob (unless you want/need it for other purposes):
$ cat app/models/test.rb
class Test < ActiveRecord::Base
end
Jeff