带有 hstore 的 ActiveAdmin 自定义范围

ActiveAdmin Custom Scope with hstore

我正在尝试为 ActiveAdmin 编写自定义范围,但 运行 出现错误:

  1. 搜索未执行
  2. 我一直收到错误消息wrong number of arguments (0 for 1)

admin/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

示例用户

#<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

所以我找到了解决我问题的方法。从以下位置找到: https://github.com/activerecord-hackery/ransack/issues/267#

这是我为解决问题所做的工作:

admin/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) .