我有一张User
模型,里面有很多照片。我希望在Active Admin中设置一个复选框过滤器,以过滤那些拥有照片的用户。基本上存在照片关联的地方。
class User < ActiveRecord::Base
has_many :photos
end
有一种简单的方法吗?我知道您可以过滤具有特定照片等的用户,但我还没有看到您可以按在场状态进行过滤的示例。
答案 0 :(得分:10)
找到正确的Ransack搜索方法的咒语是棘手的。要使用以下过滤器搜索photos.id IS NOT NULL
可以完成的位置:
ActiveAdmin.register User do
# Filter users where photos.id is not null
filter :photos_id_not_null, label: "With Photos", as: :boolean
end
答案 1 :(得分:-1)
对我有用的解决方案:
插入模型:
ransacker :has_photos do |parent|
Arel.sql("(select exists (SELECT 1 FROM photos WHERE photos.parent_id = parents.id))")
end
然后在activeadmin过滤器中使用它:
filter :has_photos_true, as: :boolean
具有计数器缓存的其他版本:
ransacker :has_photos do |parent|
Arel.sql("#{parent.table.name}.report_files_count > 0")
end