Как я могу реорганизовать этот код Rails 3? - PullRequest
2 голосов
/ 26 декабря 2010

Кто-нибудь может придумать, как это еще изменить?

@hourly_pay = {}
HourlyPay.all.each { |hp| @hourly_pay[t("hourly_pay.#{hp.amount}")] = hp.amount }

Спасибо! * * 1004


Изменить: на основании полученных ответов, вот как я реорганизовал

HourlyPay.all.map(&:amount).index_by { |hp| t("hourly_pay.#{hp.amount}") }

Поместив это прямо в мою модель, получится

  def self.get_options
   all.map(&:amount).index_by { |hp| I18n.t("hourly_pay.#{hp.amount}") }
  end

Однако я не уверен, что это требует больших вычислений, поскольку я вызываю map для значений, возвращаемых из базы данных, а затем вызываю index_by для этого. Так как моя модель HourlyPay включает только id и amount, я не беспокоюсь о выборе всего. Однако, если бы у меня было намного больше полей, я бы сделал следующее:

def self.get_options
 select(:amount).map(&:amount).index_by { |hp| I18n.t("hourly_pay.#{hp.amount}") }
end

Таким образом, выбрано только поле суммы

Спасибо за ответы!

1 Ответ

2 голосов
/ 26 декабря 2010

Намерение здесь не очень понятно, но я предлагаю вам взглянуть на использование метода index_by в перечислимом классе. Вы получите полный объект HourlyPay в качестве значения в хэше и сможете получить хеш в одну строку.

Попробуйте добавить этот код в модель, если ее там еще нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...