给出这样的数组:
%w{ field_one, field_two, some_association.field_one }
我需要对此进行迭代并在给定对象上动态调用这些方法,完全如下所述:Ruby send method with rails associations
到目前为止,我有这个,它确实正确地获取值:
field.include?('.') ? field.split('.').inject(some_object, :send) : some_object.send(field)
此外,我需要在正确的类上调用:human_attribute_name来生成标签。什么是干净的方法来实现这一目标?
答案 0 :(得分:0)
目前尚不清楚你要完成什么,但如果我不得不猜测我会说你正在尝试制作某种CMS或报告系统,其中显示的数据的定义可以通过用户界面。有这样的宝石,但看到你正在这条轨道上......
用:human_attribute_name我假设你的意思是要在页面上显示的友好名称作为标签。首先,使用字符串而不是符号更合适,因为您可以使用空格和更多字符。假设您从不打算在同一网页上有重复的标签名称,您可以尝试使用哈希而不是数组。
fields = {
"Field One" => "field_one" ,
"Field Two" => "field_two" ,
"Field One Of Some Association" => "some_association.field_one"
}
然后以与您引用的答案中显示的方式类似的方式获取数据。
data = {}
fields.each_pair do | friendly_name, attribute |
data[friendly_name] = if attribute.include?('.')
attribute.split('.').inject(some_object, :send)
else
some_object.send(attribute)
end
end
这应该留给你一个哈希,你可以像你一样在你的视图中循环
{
"Field One" => "Mr" ,
"Field Two" => "Data",
"Field One Of Some Association" => "A Friend Of Mr Data"
}