有人能找到进一步重构的方法吗?
@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模型只包含id
和amount
,因此我并不担心选择所有内容。但是,如果我有更多的字段,我会改为:
def self.get_options
select(:amount).map(&:amount).index_by { |hp| I18n.t("hourly_pay.#{hp.amount}") }
end
因此只选择了金额字段
感谢您的回复!
答案 0 :(得分:2)
这里的目的不是很明确,但我建议您在枚举类中使用index_by方法。您将获得完整的HourlyPay对象作为散列中的值,并且可以在一行中获取散列。
如果尚未存在,请考虑将此代码放入模型中。