Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 活动管理-通过存在多个关联进行筛选_Ruby On Rails_Activeadmin - Fatal编程技术网

Ruby on rails 活动管理-通过存在多个关联进行筛选

Ruby on rails 活动管理-通过存在多个关联进行筛选,ruby-on-rails,activeadmin,Ruby On Rails,Activeadmin,我有一个用户模型,上面有很多照片。我想在Active Admin中设置一个复选框过滤器来过滤那些有照片的用户。基本上是照片协会所在的地方 class User < ActiveRecord::Base has_many :photos end class用户

我有一个
用户
模型,上面有很多照片。我想在Active Admin中设置一个复选框过滤器来过滤那些有照片的用户。基本上是照片协会所在的地方

class User < ActiveRecord::Base
  has_many :photos
end
class用户

有没有一个简单的方法可以做到这一点?我知道你可以通过拥有特定照片等的用户进行过滤。但我还没有看到一个可以通过状态进行过滤的示例。

找到正确的搜索方法是一件棘手的事情。要搜索
photos.id不为NULL的位置,可以使用以下过滤器完成搜索:

ActiveAdmin.register User do
  # Filter users where photos.id is not null
  filter :photos_id_not_null, label: "With Photos", as: :boolean 
end

适合我的解决方案:

在模型中插入:

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

对我来说不起作用,生成的sql很奇怪(double where子句带有双重否定),只需稍加修改,我就可以让它起作用。就我而言,我的关系是
有很多:签名。此活动的管理配置允许我在关系存在时打开和关闭:
filter:signatures\u id\u null,标签:'Without signatures',as::boolean