ruby-on-rails - 我怎么能 'hide away' Ruby 中的复杂 group_by 子句?

标签 ruby-on-rails ruby

在 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当我使用它时会触发无限循环。

最佳答案

我认为您可以使用以下两种策略之一来实现:

  1. 将逻辑包装在关联扩展中
  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/

相关文章:

mysql - Kaminari 可以在同一个 Controller 定义中使用两次吗?

ruby-on-rails - rails : soulmate gem pipelining for multiple types

ruby-on-rails - 如何禁用 Ruby on Rails 应用程序中的所有 form_for 输入字段?

ruby-on-rails - 如何检查值是否为数字?

ruby - 从程序中运行按键

ruby-on-rails - rails : Is it possible to check if a named scope is valid for a given active record?

ruby-on-rails - 使用Rails Assets 管道维护样式表的RTL版本

ruby-on-rails - 如何保护 Rails 模型属性?

ruby-on-rails - Heroku Deploy - Gem::Installer::ExtensionBuildError: 错误:无法构建 gem native 扩展

ruby-on-rails - 使用外部 api (salesforce) 在 Rails 应用程序中将变量设置为字段映射组