【问题标题】:How to add filter by calculated value to activeadmin?如何按计算值向activeadmin添加过滤器?
【发布时间】:2017-07-25 02:26:00
【问题描述】:

我有可能被阻止的帐户。

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 

现在的问题是如何按这个字段过滤呢?

【问题讨论】:

标签: ruby-on-rails activeadmin ransack


【解决方案1】:

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

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

【讨论】:

  • 感谢您的关注,但我需要动态过滤器。例如,我应该能够找到被阻止超过 10 天的帐户。
  • 我相信这应该可以解决这个问题,如果 'Days blocked' 是您的 AA 表中动态更新的列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 2018-03-14
相关资源
最近更新 更多