2017-07-25 74 views
0

我有可以在块中的帐户。如何通过计算值添加过滤器到activeadmin?

account.rb 
has_many :blocks 

block.rb 
belongs_to :account 

块模型领域blocked_atunblocked_at。我需要过滤X天以上(含)的账户。为了选择当前状态,我的account型号中有字段blocked。 为了显示有多少天帐户已被阻止我加入这AA表:

column 'Days blocked' do |account| 
     (Date.today - account.blocks.last.blocked_at.to_date).to_i if account.blocked 
end 

的问题是如何通过这个领域现在筛选呢?

+0

你看看这个[Nikil Gupta的文章](http://nikhgupta.com/code/activeadmin/custom-filters-using-ransacker-in-activeadmin-interfaces/)? –

回答

0

我相信你可以创建自定义的范围,像这样:

scope :scope_name, -> { where('Days blocked' > X) } 

scope_name是不管你的名字和X是无论多少天,你愿意的话)

您需要这使洗劫知道你

def self.ransackable_scopes(auth_object = nil) 
    [:scope_name] 
end 

而在你的控制器:可以在你的控制器使用范围

@accounts = @q.result.scope_name 

注:这将这个范围内的所有时间过滤器,如果要筛选,只有当用户点击一个按钮或选择过滤器,看看这个问题:Rails filter with button or link_to using Ransack

+0

感谢您的关注,但我需要动态过滤器。例如,我应该能够找到被封锁超过10天的帐户。 – nobilik

+0

我相信应该为此工作,如果“被阻止的天数”是AA表中动态更新的列。 – Chase