我正在构建一个Rails应用程序,每次添加某个人时都需要更新管理人员的总计。将总数更新为我的方法看起来非常糟糕,有很多重复正在进行,可以通过一些元编程来解决。所以我有被称为上before_save
称为私有方法update_totals
Ruby动态构建和分配变量
因此,我们将其归类这样有四场比赛,非洲,有色,印第安人和白人有三种管理人员高级,中级和初级的,然后很明显2种性别男性和女性。我需要能够分配三个可能的变体,所以我最终得到了这样的结果。
self.number_of_african_female_senior_managers = managers.native.african.female.senior.count
self.number_of_african_male_senior_managers = managers.native.african.male.senior.count
self.number_of_african_female_middle_managers = managers.native.african.female.middle.count
self.number_of_african_male_middle_managers = managers.native.african.male.middle.count
self.number_of_african_female_junior_managers = managers.native.african.female.junior.count
self.number_of_african_male_junior_managers = managers.native.african.male.junior.count
我需要为每场比赛做到这一点。所以我想动态构建它们,然后让它们分配。
因此,像这样:
["african", "indian", "coloured", "white"].each do |race|
["senior","middle","junior"].each do |management_type|
["male","Female"].each do |gender|
"number_of_#{race}_#{gender}_#{management_type}_managers" = managers.native.race.gender.management_type.count
end
end
end
但是,这将返回字符串并不算分配变量。我看到有一个define_method
方法可以动态构建方法,但看起来像你不得不在构造函数in this example之外调用它,并且我看到你可以使用Object#send
这样的example,但是我无法看到在这种情况下工作。
这是一个很好的红宝石实践?它增加了一点复杂性,但删除了大量的DRY代码。
你的问题看起来非常糟糕有很多句子从低档案开始,没有适当的功能来完成,可以解决一点关心尊重任何人可能会花时间阅读和回答你的问题 – sawa
有一个像你的几个问题:http://stackoverflow.com/questions/17842765/how-do-i-dynamically-create-a-local-variable-in-ruby ...等 – AndreDurao
对不起,如果我的标点符号冒犯了你Sawa 。 AndreDurao这个问题对我来说毫无意义。我将在eval上查找文档。 – TheLegend