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

Kie*_*sen 35 ruby-on-rails ruby-on-rails-3

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

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

attribute_name = "name"
user = User.find(1)
user.get_attribute_by_name(attribute_name) => "John"
Run Code Online (Sandbox Code Playgroud)

谢谢!

Fre*_*ung 70

所有这些应该工作:

user[attribute_name]
user.read_attribute(attribute_name)
user.send(attribute_name)
Run Code Online (Sandbox Code Playgroud)

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

  • `user [attribute_name]`与`user.send(attribute_name)`不同.`user [attr_name]`=>从db字段获取,`user.send(attr_name)`=>从模型获取 (5认同)
  • @user2041318 使用 send 您需要特别确定您已被传递了一个实际的属性名称(而不是,例如,'destroy') (2认同)

Bre*_*lle 9

您可以使用 或[]read_attribute()它们并不等效。更安全的访问方法是使用[] methodActiveModel::MissingAttributeError方法,因为如果属性不存在,它会引发错误。如果属性不存在,则 read_attribute方法返回。nil

  • 它刚刚被移动到模块“ActiveRecord::AttributeMethods::Read”并且仍然存在。 (3认同)