2013-09-24 43 views
1

我有一個方法,在我的車型之一類似如下:ActiveAdmin:過濾方法而不是屬性?

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的選項YesNo,和Any),但我似乎無法弄清楚如何。

過濾模型方法而不是其中一個屬性的最佳方法是什麼?

+0

你能否提供關於'conditions'的更多細節。首先想到的是使用'範圍',但需要看看條件是否會起作用。 – tihom

+0

還請指定您正在過濾的是記錄還是視圖或方法調用? – engineersmnky

+0

@tihom和engineersmnky - 請參閱上面的更新。 –

回答

0

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 
+0

對不起,這是怎麼回事?我的模型的ActiveAdmin.register塊?那麼'過濾'方法會是什麼樣子?謝謝你的幫助。 –

+0

這在'ActiveAdmin.rb'文件中。它允許你通過調用'ActiveAdmin.current'訪問過濾的記錄。 'ActiveAdmin'是你的應用中的一個模型嗎? – tihom

+0

不,ActiveAdmin是我在我的項目(https://github.com/gregbell/active_admin)中使用的寶石。 –

相關問題