2010-10-15 30 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