【问题标题】:Active Admin Filters no viewing活动管理员过滤器没有查看
【发布时间】: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

集合说

  1. 遍历所有用户并调用 u.site(因为 site_id 属于用户,因此有一个 Site 表将采用每个实例 用户)
  2. 既然我们现在位于每个站点对象,请映射每个站点对象 值并检索每个站点对象的城市名称(如果是) 现在...
  3. 我只想过滤 uniq 值,而 .compact 是 摆脱数组中的 nil 值

我认为有更好的解决方案,因为我正在经历如此多的迭代?有人有其他想法吗?我将在重构后将其作为用户模型的实例方法。

【问题讨论】:

    标签: ruby-on-rails activeadmin


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • 刚试过:undefined method `site_id_eq' for Ransack::Search&lt;class: Degree, base: Grouping &lt;combinator: and&gt;&gt;:Ransack::Search
    • 我做了一些工作,就像这样filter :user_site_id, label: "site", :as =&gt; :select, :collection =&gt; User.all.map{|u| u.site}.map{|s| s.city if s.present? }.uniq.compact
    • 实际上@AndreyDeineko,你的工作,如果你做一个filter :user_site_id而不是filter :site_id我不太了解ransack是如何工作的,但在那之后我虽然我可以打电话给.city Site 表有一个 city 属性。
    • 请编辑您的答案,并解释为什么这是一个好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多