Я создаю приложение rails, которое мне нужно обновлять итоговые суммы менеджеров каждый раз, когда кто-то добавляется. Метод, который обновляет итоговые значения для меня, выглядит очень плохо, происходит много повторений, которые могут быть решены с помощью метапрограммирования. поэтому у меня есть частный метод вызывается на before_save
называется update_totals
Ruby динамически строить и назначать varibles
Таким образом, мы классифицировать их, как это есть четыре расы, африканские, цветные, индийский и белый есть три вида управлений старших, средних и младших, а затем, очевидно, два вида мужчин и женщин. Мне нужно уметь назначать каждую возможную вариацию трех, поэтому я получаю что-то вроде этого.
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, но я не могу видеть, что работаю и в этой ситуации.
Это хорошая рубиновая практика? Он добавляет немного сложности, но удаляет много СУХИХ кода.
Ваш вопрос выглядит очень плохим, есть много предложений, начиная с низкого корпуса и без надлежащей связи, чтобы закончить, что можно было бы решить с некоторой осторожностью, чтобы быть уважительным для всех, кто мог бы потратить время на чтение и ответить на ваш вопрос. – sawa
несколько вопросов, как и ваши: http://stackoverflow.com/questions/17842765/how-do-i-dynamically-create-a-local-variable-in-ruby ... среди прочих – AndreDurao
Извините, если моя пунктуация оскорбляет вас, Сава , AndreDurao, этот вопрос не имеет для меня никакого смысла. Я собираюсь найти документацию по eval. – TheLegend