簡體   English   中英

ActiveAdmin:篩選方法而不是屬性?

[英]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的簡單選擇過濾器,該選項具有YesNoAny ),但是我似乎不知道該怎么做。

篩選模型方法而不是其屬性之一的最佳方法是什么?

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM