5

我有一个带有 :birthday 属性的模型,我想按表单中指定的月份过滤掉那些日期(ActiveAdmin 的 DSL :select)。

这是一个仅提取生日月份的简单范围示例。也许可以帮助:

scope :birthday_month, where('extract(month from birthday) = ?', Date.today.month)
4

2 回答 2

6

这是一个解决方案:

在我的 Active Admin 资源 (app/admin/employees.rb) 上,我输入:

filter :month, :as => :select, :collection => (1..12)

在我的模型(app/models/employee.rb)上:

scope :month_eq, lambda{ |month| where("strftime('%m', birthday) + 0 = ?", month.to_i) }

search_methods :month_eq

这种方法定义了“_eq”范围方法(MetaSearch)并通过search_methods :month_eq(MetaSearch)将其变为可用。

注意:
如果您不使用 sqlite,也许您会希望使用它where('extract(month from birthday) = ?', month.to_i)

于 2012-08-20T21:04:40.537 回答
2

Active Admin 最新版本的解决方案:

#app/admin/employees.rb
filter :month, :as => :select, :collection => (1..12)

#app/models/employee.rb
scope :month_eq, ->(month) { where('MONTH(birthday) = ?', month.to_i) } # for MySQL

def self.ransackable_scopes(_auth_object = nil)
  [:month_eq]
end
于 2016-07-29T12:45:05.593 回答