[英]ActiveAdmin: Filter on method rather than attribute?
我在一種模型上有一種方法,如下所示:
def current?
self.parent.start_date <= Time.zone.now.to_date && self.parent.end_date >= Time.zone.now.to_date && !self.archived
end
我想基於此方法的結果在ActiveAdmin中創建一個簡單的過濾器(一個名為Current
的簡單選擇過濾器,該選項具有Yes
, No
和Any
),但是我似乎不知道該怎么做。
篩選模型方法而不是其屬性之一的最佳方法是什么?
ActiveAdmin.rb
的以下類方法將根據條件返回所有記錄,例如ActiveAdmin.current("Yes")
或ActiveAdmin.current("No")
。
def self.current(inp = "Yes") # default inp is "Yes"
d = Time.zone.now.to_date
return case inp
# when inp == "Yes" it would return all the records with archived == false (won't return archived == nil)
# AND parents with start_date <= d and end_date >= d
when "Yes"
where(archived: false ).
joins(:parent).
where("parents.start_date <= ? AND parents.end_date >= ?",d,d)
# when inp == "No" it would return all the records with archived == true (won't return archived == nil)
# AND parents with start_date > d OR end_date < d
when "No"
where(archived: true ).
joins(:parent).
where("parents.start_date > ? OR parents.end_date < ?",d,d)
# when inp = "Any" return all records
when "Any"
scoped
# return all records if inp does not match any of the above options
else
scoped
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.