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.
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
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
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.