按字符串获取ActiveRecord对象的属性

时间:2012-08-04 13:11:56

标签: ruby-on-rails ruby-on-rails-3

这可能是一件非常简单的事情,但无法找到解决方案。

我有一个ActiveRecord对象,想要获得这样的属性:

attribute_name = "name"
user = User.find(1)
user.get_attribute_by_name(attribute_name) => "John"

谢谢!

3 个答案:

答案 0 :(得分:66)

所有这些都应该有效:

user[attribute_name]
user.read_attribute(attribute_name)
user.send(attribute_name)

我个人不会在这种情况下使用send。如果可用,请选择public_send发送

答案 1 :(得分:2)

您可以使用[]read_attribute(),但they are not equivalent。  更安全的访问方法是使用[] method方法,因为如果该属性不存在,它将引发ActiveModel::MissingAttributeError错误。如果该属性不存在,read_attribute method将返回nil

答案 2 :(得分:-1)

在Rails 5中,只有attribute_name = "name"正常工作