Currently [] and []= are defined as follows for ActiveRecord instances:
https://github.com/rails/rails/blob/master/activerecord/lib/active_record/attribute_methods.rb
def [](attr_name)
read_attribute(attr_name)
end
def []=(attr_name, value)
write_attribute(attr_name, value)
end
If those accessors are used then overridden attribute accessors wouldn't
be called.
I didn't find any references about the []/[]= methods in the current
API, so I just mentioned them in docrails:
https://github.com/lifo/docrails/commit/a49fe6ec2cb9f22a3b18d7db5ae2ee90325e9d09
But then I realized that the given example may have undesired side effects:
[:deleted, :disabled].each{|p| model[p] = params[p] == 'true' }
What if "deleted=" or "disabled=" were overridden? They wouldn't be called.
So I was thinking that maybe Rails 4 could change their implementation to:
def [](attr_name)
send attr_name.to_s
end
def []=(attr_name, value)
send :"#{attr_name}=", value
end
Better to read this style of code in some framework than inside some
application...
Any thoughts?
Happy Easter!
Rodrigo.
--
You received this message because you are subscribed to the Google Groups "Ruby on
Rails: Core" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rubyonrails-core?hl=en.