2016-01-13 38 views
-2

呼吁on Rails的给定一个数组是这样的:动态法协会

%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在正确的类来生成标签。什么是干净的方式来实现这一目标?

+1

既然你有什么工作,你能澄清你的意思是什么“此外,虽然,我需要调用:在正确的类human_attribute_name生成标签“。我不知道“正确”的类是什么,或者你所说的“标签”的意思请解释这个问题,你所面临的不是你已经解决了这个问题。 – engineersmnky

回答

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" 
}