如何通过计算值将过滤器添加到activeadmin?

时间:2017-07-25 02:26:01

标签: ruby-on-rails activeadmin ransack

我有可以阻止的帐户。

account.rb
has_many :blocks

block.rb
belongs_to :account

块模型包含字段blocked_atunblocked_at。我需要过滤超过X天的块中的帐户。为了选择当前状态,我在blocked模型中有字段account。 要显示帐户被冻结的天数,我将其添加到AA表:

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

现在的问题是如何通过这个字段过滤它?

1 个答案:

答案 0 :(得分:0)

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

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

scope_name无论你的名字是什么,X都是你想要的多少天)

您需要这样,所以Ransack知道您可以在控制器中使用此范围:

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

在你的控制器中:

@accounts = @q.result.scope_name

注意:这将始终按此范围进行过滤,如果您只想在用户点击按钮或选择过滤器时进行过滤,请参阅此问题:Rails filter with button or link_to using Ransack