2010-10-15 76 views
2

在Rails 3应用程序中,我运行了一个有点复杂的group_by,并且很好奇,如果我可以将它隐藏在其他地方,就像可以隐藏范围内的ActiveRecord条件一样。我意识到GROUP_BY是可枚举的操作,因此示波器在这里不适用,但我的问题是,如果有一个比较的方式来创建一个简写本的方式:我怎样才能在Ruby中隐藏复杂的group_by子句?

@launches_and_finales = Show.launches_and_finales.sort_by { |s| 
    (s.run_starts_on && 
    ((Date.today - 3.days)..(Date.today + 3.days)) === s.run_starts_on) ? 
    s.run_starts_on : s.run_ends_on } 

附注:我知道3.days.ago..3.days.from_now会更简洁,但有一个bug in Ruby 1.9.2,当我使用它时会触发无限循环。

回答

1

我想你可以实现此使用这两种策略之一:

  1. 裹关联扩展中的逻辑
  2. Rails 3中的阿雷尔可以帮你换行到一个标准的方法调用

    类展会

    高清self.launches_and_finales

    where(["run_starts_on between ? and ? or ...", Time.now - 3.day, Time.now + 3.days]) 
    

+0

我从来没有想过在模型层做更复杂的逻辑。我必须在这里只考虑范围和限制,但我当然可以添加一个全新的方法。我不认为2会做到这一点,因为它是我所追求的更复杂的群体,而不仅仅是过滤器。 – 2010-10-28 21:07:25