我正在構建一個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