活动管理 - 通过has_many关联过滤

时间:2015-01-06 11:39:20

标签: ruby-on-rails activeadmin

我有一张User模型,里面有很多照片。我希望在Active Admin中设置一个复选框过滤器,以过滤那些拥有照片的用户。基本上存在照片关联的地方。

class User < ActiveRecord::Base
  has_many :photos
end

有一种简单的方法吗?我知道您可以过滤具有特定照片等的用户,但我还没有看到您可以按在场状态进行过滤的示例。

2 个答案:

答案 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

找到ref-1ref-2

具有计数器缓存的其他版本:

ransacker :has_photos do |parent|
  Arel.sql("#{parent.table.name}.report_files_count > 0")
end