2012-02-28 225 views
8

如何dynamiclly获取activerecord对象的属性值?动态获取对象的属性

例如我有一个名为attr_name的变量。
我想要做这样的事情:

person = Person.find(1) 
attr_name = "address" 
address = person.<function_name>(attr_name) 

function_name可以用吗?

回答

3

send是您正在查找的方法。

+4

取决于其中函数名称从何而来,这可能是相当危险的,所以我不会做 – 2012-02-28 14:42:57

22

可以使用person.attributes[attr_name]person.read_attribute(att_name),或者甚至更短,那么这是person[attr_name]

+3

这是最安全和正确的方法。请注意,这只适用于属性,不适用于其他方法或关联。 – 2012-02-28 14:43:51

+0

无法使用'object [symbol或string]'语法获取属性或方法。创建一个简单的类,并首先使用点语法公开访问一些变量或方法,然后尝试通过符号或字符串来访问它。不劳逸。 – 2017-09-26 17:52:11

+0

''' 类Foo DEF初始化 @foo = '富名' @bar = '栏名' 端 DEF foo的 @foo 端 端 富= Foo.new FOO [:foo] ''' – 2017-09-26 17:52:34

1

如果这样使用send

address = person.send("function_name" + "attr_name")