[英]ActiveAdmin Custom Scope with hstore
我正在嘗試為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
示例用戶
#<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
的上傳屬性過濾users
的任何想法?
因此,我能夠為我的問題找到解決方案。 從以下位置找到這個: 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,我不得不在upload
屬性周圍包裹build_quoted
,因為我得到了unsupported: String
錯誤( https://github.com/rails/arel/issues/323 )。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.