Rails 3 + ActiveAdmin - 从父模型索引过滤has_many关联

时间:2014-12-04 16:38:26

标签: ruby-on-rails ruby activerecord scope activeadmin

我有两种模式:

class Worker
  has_many :location_preferences
end

class LocationPreference
  attr_accessible :location
  belongs_to :worker
end

在ActiveAdmin Worker索引中,我希望能够通过使用选定:location的位置首选项来过滤工作者(或者理想情况下,通过多个位置首选项查找工作人员的复选框)。

在其他情况下,我已经能够对子索引进行过滤,如下所示:

ActiveAdmin.register Account

filter :user_last_name

...使用提供的last_name查找用户拥有的帐户。但我没有太多运气通过子类的属性过滤父类。我可以制作一个范围按钮,但我已经为这个AA资源提供了一堆范围按钮,并且不想拥挤它。此外,似乎应该有一些方法来做到这一点,而无需为每个可以想象的过滤器选项编写范围。

提前感谢您的任何帮助!

1 个答案:

答案 0 :(得分:1)

添加has_many :locations, through: :location_preferences将允许将位置过滤器添加到Worker

class Worker
  has_many :location_preferences

  # Add has many through relation
  has_many :locations, through: :location_preferences
end

然后可以使用位置过滤器定义ActiveAdmin资源。

ActiveAdmin.register Worker do
  filter :locations, as: :check_boxes
end