:birthday 属性を持つモデルがあり、フォーム (ActiveAdmin の DSL :select) で指定された月ごとにこれらの日付を除外したいと考えています。
これは、誕生日の日付の月のみを抽出する単純なスコープの例です。多分助けることができます:
scope :birthday_month, where('extract(month from birthday) = ?', Date.today.month)
:birthday 属性を持つモデルがあり、フォーム (ActiveAdmin の DSL :select) で指定された月ごとにこれらの日付を除外したいと考えています。
これは、誕生日の日付の月のみを抽出する単純なスコープの例です。多分助けることができます:
scope :birthday_month, where('extract(month from birthday) = ?', Date.today.month)
ここに解決策があります:
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)
代わりに使用することをお勧めします。