在group_by中使用实例方法

时间:2014-04-03 13:42:52

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

我真的不喜欢它看起来方法all,特别是那部分 .group_by{|x| x.week_number}.values因为这部分可以替换吗? week_number是UserUpdate模型中的实例方法。

user_updates_controller.rb

def all
  @weekly_updates = current_user.user_updates.group_by{|x| x.week_number}.values
end

user_update.rb

def week_number
  (((created_at.utc) - user.first_program_started_at.utc.beginning_of_day) / 86400 / 7).ceil.to_i || 1
end

1 个答案:

答案 0 :(得分:0)

好吧,我相信我现在明白了,但请告诉我这是不是你想要的。

我相信你的情况,你可以这样做:

  @weekly_updates = current_user.user_updates.group_by(&:week_number).values

&:week_number表示法是创建proc的简写,并且将有效地调用传入的对象上的week_number方法(在本例中为UserUpdate对象)。最终,您应该看到完全相同的结果。不会有任何性能差异,所以它主要只是为你的代码做好准备。

查看this question以及有关该&:符号的大量示例和说明的答案。