【发布时间】:2013-01-30 13:54:14
【问题描述】:
我想在 hstore 中使用 activeadmin 过滤器:
在模型中,我有 Room 的列便利设施。
我想做这样的事情:
过滤器 :amenities, :as => :select, :collection => proc {Room.all.map{|r| r.amenities} }
【问题讨论】:
标签: ruby-on-rails ruby activeadmin
我想在 hstore 中使用 activeadmin 过滤器:
在模型中,我有 Room 的列便利设施。
我想做这样的事情:
过滤器 :amenities, :as => :select, :collection => proc {Room.all.map{|r| r.amenities} }
【问题讨论】:
标签: ruby-on-rails ruby activeadmin
您可以为 HStore 数据类型创建一个 Formtastic 自定义输入。如果您不希望 Hstore 值可编辑,这应该足够了(您还可以使用 input_html_options 将输入字段设置为只读):
class HstoreInput < Formtastic::Inputs::StringInput
end
这会在写入时破坏属性值。
【讨论】:
使用最新的activeadmin(使用ransack 而不是meta_search)可以为模型中的hstore 字段定义自定义ransacker:
class Room < ActiveRecord::Base
store_accessor :options, :amenities
ransacker :amenities do |parent|
Arel::Nodes::InfixOperation.new('->', parent.table[:options], 'amenities')
end
end
那么就可以在activeadmin中进行过滤了:
ActiveAdmin.register Room do
filter :amenities_eq, label: 'Amenities', as: :select # ...
end
【讨论】: