有效管理员过滤无法查看

时间:2015-04-28 19:14:07

标签: ruby-on-rails activeadmin

所以我在Active Admin中,在以下模型中Degree belongs to a userUser has many degrees

对于User,我们有一个site_id,用于标识用户在Site表格中的工作位置

因此,在Active Admin的学位模型的过滤器中,我似乎无法提取有人可以在Active Admin UI中过滤的网站列表。

到目前为止,这是我的过滤器: major institution completion_date

这些直接来自Degree表格

:user_active来自Users表,其中包含Active

的布尔属性
ActiveAdmin.register Degree do

  belongs_to :user, :optional => true

  menu :parent => 'Users'

  config.sort_order = 'users.last_name_asc'

  filter :user_active, :as => :select
  **filter :site_id, collection: -> { User.all }, label: 'sites'**
  filter :degree_type
  filter :major
  filter :institution
  filter :completion_date

我也试过这个

  filter :site_id, :as => :select, collection: -> { User.all }, label: 'sites'

并且没有错误消息

我也尝试了类似这样的内容,没有任何错误消息,但UI中没有任何内容再次出现

filter :site, label: "Site", :as => :select, :collection => User.site_id

我已尝试过此操作并收到以下错误:

  filter :site_id, label: "Site", :as => :select, :collection => User.all

undefined method `site_id_eq' for Ransack::Search<class: Degree, base: Grouping <combinator: and>>:Ransack::Search

这里有任何帮助吗?

更新

我做了一些解决方法,这就是我最后编写的

filter :user_site_id, label: "site", :as => :select, :collection => User.all.map{|u| u.site}.map{|s| s.city if s.present? }.uniq.compact

该系列说

  1. 遍历所有用户并调用u.site(因为site_id 属于一个用户,所以有一个Site表,它将采用每个实例 用户)
  2. 由于我们现在在每个Site对象上,因此映射每个对象 值并检索每个Site对象的城市名称(如果是) 本...
  3. 我想只过滤uniq值,而.compact是 摆脱数组中的nil值
  4. 我认为这是一个更好的解决方案,因为我经历了这么多次迭代?有没有其他想法?我将在重构之后将这个实例方法设置为Users模型。

1 个答案:

答案 0 :(得分:1)

试试这个:

 filter :site_id, as: :select, collection: -> { User.pluck(:site_id) }, label: 'Sites'