【发布时间】:2014-03-20 22:10:15
【问题描述】:
我正在使用 ActiveAdmin,我需要构建一个自定义过滤器,一个能够过滤用户索引列表的组合框。例如:
<select>
<option value="designer">Diseñador</option>
<option value="developer">Desarrollador</option>
<option value="manager">Jefe de Proyecto</option>
</select>
我有用户...
#<User id: 1, email: "un@tipo.com", abilities: {"designer"=>"Some comment", "developer"=>"Other comment", "manager"=>"Another comment"}>
#<User id: 2, email: "otro@tipo.com", abilities: {"designer"=>"blah blah"}>
如您所见,abilities 属性 在 User model 上定义为:
serialize :abilities, Hash
所以,当我在组合框中选择设计者时,我想在列表中看到两个用户。 如果我选择经理,我希望看到一个用户。
我知道 ActiveAdmin 使用 ransack 构建过滤器,但我不知道如何使用它来处理序列化属性。
我尝试通过以下代码使用ransacker:
ActiveAdmin:
ActiveAdmin.register User do
filter :by_ability, as: :string, collection: ['designer', 'other']
型号:
class User < ActiveRecord::Base
scope :by_ability_eq, lambda {|v| User.where(["users.abilities LIKE '%?%'", v]) }
ransacker :by_ability_eq
但我收到此错误:
undefined method `by_ability_eq' for Ransack::Search<class: User, base: Grouping <combinator: and>>:Ransack::Search
【问题讨论】:
标签: ruby-on-rails activeadmin ransack