It is probably a really simple thing but can't find a solution.
I have an ActiveRecord object and want to get an attribute like this:
attribute_name = "name"
user = User.find(1)
user.get_attribute_by_name(attribute_name) => "John"
Thanks!
All of these should work:
user[attribute_name]
user.read_attribute(attribute_name)
user.send(attribute_name)
Personally I wouldn't use send in this case. When available, prefer public_send to send
send. However if you are accessing an association rather than a plain attribute, it seems like send is your best bet.send? I'm afraid I have to use it.user.read_attribute_for_serialization(attribute_name) (it works, though I dont know what that fuction is for)user[attribute_name] are different user.send(attribute_name). user[attr_name] => get from db field, user.send(attr_name) => get from modelYou can use either [] or read_attribute() but they are not equivalent.
The safer method of access is using the [] method method because it will raise an ActiveModel::MissingAttributeError error if the attribute does not exist. The read_attribute method returns nil if the attribute does not exist.
ActiveRecord::AttributeMethods::Read and is still present.[] and read_attribute functions.