【发布时间】:2015-04-28 19:14:07
【问题描述】:
所以我在 Active Admin 和以下模型中 Degree belongs to a user 和 User has many degrees
对于User,我们有一个site_id,用于标识用户在Site 表中的工作位置
因此,在我的 Active Admin 学位模型中的过滤器中,我似乎无法在 Active Admin UI 中提取某人可以从中过滤的网站列表。
到目前为止,这是我的过滤器:
major
institution
completion_date
这些直接来自Degree 表
:user_active 来自带有布尔属性的用户表 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
集合说
- 遍历所有用户并调用 u.site(因为 site_id 属于用户,因此有一个 Site 表将采用每个实例 用户)
- 既然我们现在位于每个站点对象,请映射每个站点对象 值并检索每个站点对象的城市名称(如果是) 现在...
- 我只想过滤 uniq 值,而 .compact 是 摆脱数组中的 nil 值
我认为有更好的解决方案,因为我正在经历如此多的迭代?有人有其他想法吗?我将在重构后将其作为用户模型的实例方法。
【问题讨论】: