带有hstore的ActiveAdmin自定义范围

时间:2016-04-13 21:32:52

标签: ruby-on-rails ruby-on-rails-4 activeadmin hstore

我正在尝试为ActiveAdmin编写自定义作用域,但一直遇到错误:

  1. 搜索未执行
  2. 我一直收到错误wrong number of arguments (0 for 1)
  3. 系统管理员/ 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

1 个答案:

答案 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)。