2016-04-13 2 views
0

Я пытаюсь написать пользовательскую область для ActiveAdmin, но продолжает работать в ошибки:ActiveAdmin Пользовательского Scope с hstore

  1. Поиска не исполняющий
  2. я получаю сообщение об ошибке 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 

Пример пользователя

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

Так что я смог найти решение для моего вопроса. Нашел от: 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).