【发布时间】:2012-02-28 11:54:23
【问题描述】:
如何动态获取 activerecord 对象的属性值?
例如,我有一个名为 attr_name 的变量。
我想做这样的事情:
person = Person.find(1)
attr_name = "address"
address = person.<function_name>(attr_name)
可以使用哪个function_name?
【问题讨论】:
标签: ruby-on-rails ruby
如何动态获取 activerecord 对象的属性值?
例如,我有一个名为 attr_name 的变量。
我想做这样的事情:
person = Person.find(1)
attr_name = "address"
address = person.<function_name>(attr_name)
可以使用哪个function_name?
【问题讨论】:
标签: ruby-on-rails ruby
使用person.attributes[attr_name] 或person.read_attribute(att_name),甚至更短,即person[attr_name]。
【讨论】:
object[symbol or string] 语法获取属性或方法。创建一个简单的类,并首先使用点语法使一些变量或方法可以公开访问以查看它是否有效,然后尝试通过符号或字符串访问它.. 无效。
send 是您正在寻找的方法。
【讨论】:
[] 或attributes[] 或read_attribute 之类的东西。它更清晰,危险性更小。但是,要做真正动态的事情,你需要send。
如果这样做使用send
address = person.send("function_name" + "attr_name")
【讨论】:
[] 或attributes[] 或read_attribute 之类的东西。它更清晰,危险性更小。但是,要做真正动态的事情,你需要send。