ruby 模型方法的自定义ActiveAdmin筛选器

cgyqldqp  于 9个月前  发布在  Ruby
关注(0)|答案(1)|浏览(108)

我需要为ActiveAdmin创建一个过滤器。挑战在于我试图过滤模型的方法,而不是模型的字段或列。下面是我的代码:

class Model < ApplicationRecord

def complicated_method
  if something
   do this
  else
   do that
  end
end

字符串
在我的管理员文件中,我需要:

ActiveAdmin.register Model do
  filter: :complicated_method, as: :numeric

end


有什么建议吗?谢谢

6pp0gazn

6pp0gazn1#

您可能需要在模型中定义一个自定义的ransacker,而不是使用作用域。

class Model < ApplicationRecord
  # ...

  # Custom ransacker
  ransacker :complicated_method_ransackable_equals, formatter: proc { |v|
    data = select { |m| m.complicated_method.to_s == v.to_s }
    data.present? ? data.map(&:id) : nil
  } do |parent|
    parent.table[:id]
  end
end

字符串
现在,在您的ActiveAdmin资源中使用相同的过滤器名称,但要确保它与下面这样的自定义ransacker保持一致。

ActiveAdmin.register Model do
  filter :complicated_method_ransackable_equals, as: :numeric, label: 'Complicated Method'
end

相关问题