在 Rails 3 应用程序中,我正在运行一个有点复杂的 group_by,我很好奇是否可以将它隐藏在其他地方,就像可以在一个范围内隐藏 ActiveRecord 条件一样。我意识到 group_by 是对 Enumerable 的操作,因此范围不适用于此处,但我的问题是是否有办法以类似的方式为此创建简写:
@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当我使用它时会触发无限循环。
最佳答案
我认为您可以使用以下两种策略之一来实现:
- 将逻辑包装在关联扩展中
Rails 3 的 Arel 可以帮助您将其包装到标准方法调用中
类(class)展示
def self.launches_and_finales
where(["run_starts_on between ? and ? or ...", Time.now - 3.day, Time.now + 3.days])
结束
结束
关于ruby-on-rails - 我怎么能 'hide away' Ruby 中的复杂 group_by 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3943231/