Reputation: 1103
I have a User
model that has_many photos. I'm looking to set up a checkbox filter in Active Admin to filter those users who have photos. Basically where the photos association is present.
class User < ActiveRecord::Base
has_many :photos
end
Is there an easy way to do this? I know you can filter by users who have a certain photo etc. but I haven't seen an example where you can filter by presence.
Upvotes: 6
Views: 3454
Reputation: 2202
Solution that work for me :
Insert in model :
ransacker :has_photos do |parent|
Arel.sql("(select exists (SELECT 1 FROM photos WHERE photos.parent_id = parents.id))")
end
Then use it in activeadmin filter :
filter :has_photos_true, as: :boolean
Another version if you have a counter cache:
ransacker :has_photos do |parent|
Arel.sql("#{parent.table.name}.report_files_count > 0")
end
Upvotes: -2
Reputation: 3373
Finding the correct incantation of Ransack search methods is tricky. To search where the photos.id IS NOT NULL
can be accomplished with the following filter:
ActiveAdmin.register User do
# Filter users where photos.id is not null
filter :photos_id_not_null, label: "With Photos", as: :boolean
end
Upvotes: 14