假设我有一个模型name
,具有任意数量的属性,包括person.name = "Jake"
attr = "name"
puts person.attr
=> "Jake"
。通过使用变量指定属性可以动态选择要调用的属性吗?像这样:
if attr == "name"
puts person.name
elsif attr == "height"
puts person.height
...
我可以使用这样的条件语句来做到这一点:
platformBrowserDynamic().bootstrapModule(AppModule);
但这似乎效率很低。
答案 0 :(得分:3)
如果您使用的是ActiveRecord,则可以使用[]
来获取属性。
person = Person.last
attr = "height"
puts person[attr]
但这仅适用于Person.columns_hash
中的属性,不适用于关联之类的东西。
为此,您需要使用public_send
,例如
person = Person.last
attr = 'height'
puts person.public_send(attr.to_sym)
如果要允许用户选择这是什么属性,则需要将其列入白名单,以便某人不会attr = params[:attribute]
并致电?attribute=destroy
并销毁一条记录。除非您希望他们...:)
答案 1 :(得分:2)
尝试person.send(:height)
。它打开了元编程的全新世界,是吧?