我正在尝试为ActiveAdmin编写自定义作用域,但一直遇到错误:
wrong number of arguments (0 for 1)
系统管理员/ user.rb
filter :user_upload, label: 'User Upload Ability', as: :select, collection: [['On', 'false'], ['Off', 'true']]
user.rb
scope :user_upload, ->(value) { where('properties @> hstore(?, ?)', 'upload', value) }
def self.ransackable_scopes(auth_object = nil)
:user_upload
end
示例用户</ strong>
#<User id: 1, name: "Example", created_at: "2015-03-14 07:00:00", updated_at: "2016-04-13 20:27:50", properties: {"upload"=>"false"}>
不确定我是否正确的方法。关于如何执行我的范围的任何想法,以便我可以通过其上传属性过滤users
?
答案 0 :(得分:1)
所以我能够找到解决问题的方法。从以下发现: https://github.com/activerecord-hackery/ransack/issues/267#
这是我为修复所做的事情:
系统管理员/ user.rb 强>
filter :upload_eq, label: 'User Upload Ability', as: :select, collection: { 'On' => 'false', 'Off' => 'true' }
<强> user.rb 强>
ransacker :upload do |parent|
Arel::Nodes::InfixOperation.new('->', parent.table[:properties], Arel::Nodes.build_quoted('upload'))
end
原来我不需要使用ransackable_scopes
方法来实现这一目标。因为我使用Rails 4.2,我必须在build_quoted
属性周围包裹upload
,因为我收到了unsupported: String
错误(https://github.com/rails/arel/issues/323)。