[英]active admin custom filter for serialized attribute
我有以下型號:
Class User < ApplicationRecord
has_one :profile
end
class Profile < ApplicationRecord
belongs_to :user
end
我在配置文件中有技能列,其中存儲了一系列技能。 我正在使用 rails active admin 並過濾具有技能的用戶,我遇到了一個問題
PG::InvalidTextRepresentation: 錯誤: 格式錯誤的數組文字: "java"
我的過濾器代碼是:
filter :profile_skills, label: 'Skills', as: :string
我不明白有什么問題。 請幫幫我
ActiveAdmin使用洗劫的寶石用於過濾。 使用ransack按數組過濾的最簡單方法是在模型中定義范圍:
class Profile < ApplicationRecord
# @!method skills_includes(skill)
# @param skill [String]
# @return [ActiveRecord::Relation<Profile>]
scope :where_skills_contains, ->(skill) { where("skills @> ?", "{#{skill}}") }
end
使用此范圍,您可以按此配置文件等技能過濾配置Profile. skills_include('java')
Profile. skills_include('java')
。
默認情況下,ransack 不允許使用范圍進行過濾,因此您必須將此范圍列入白名單:
class Profile
def self.ransackable_scopes(*)
%i(where_skills_contains)
end
end
現在可以在過濾器中找到可洗劫的范圍:
filter :where_skills_contains, label: :skills, as: :string
請注意,您不能命名過濾器(和范圍) skills_contains
,因為它會生成與數據庫完全不同的查詢。
> Profile.ransack(where_skills_contains: 'java').result.to_sql
#=> SELECT "profiles".* FROM "profiles" WHERE (skills @> '{java}')
> Profile.ransack(skills_contains: 'java').result.to_sql
#=> SELECT "profiles".* FROM "profiles" WHERE ("profiles"."skills" ILIKE '{%java%}')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.