我怎样才能重构这个Rails 3代码?

时间:2010-12-26 04:05:11

标签: ruby-on-rails refactoring ruby-on-rails-3

有人能找到进一步重构的方法吗?

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

谢谢!


编辑:根据我收到的答案,这是我重构的方式

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模型只包含idamount,因此我并不担心选择所有内容。但是,如果我有更多的字段,我会改为:

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

因此只选择了金额字段

感谢您的回复!

1 个答案:

答案 0 :(得分:2)

这里的目的不是很明确,但我建议您在枚举类中使用index_by方法。您将获得完整的HourlyPay对象作为散列中的值,并且可以在一行中获取散列。

如果尚未存在,请考虑将此代码放入模型中。