2017-11-03 5 views
1

hstoreフィールドのカスタムフィルタフィールドを追加しようとしています。 activeadminでアクティブな管理者の複数のhstoreキーによるフィルタ

:モデルでfilter :by_title, label: 'Title', as: :string

:このコードはactiveadmin選択に応じて、正しいクエリを作成検索さ

ransacker :by_title do |parent| 
    Arel::Nodes::InfixOperation.new('->', 
    parent.table[:title_translations], Arel::Nodes.build_quoted('en')) 
end 

(含まれ、等しい、starts_with又はends_with)私が使用

複数のロケールのタイトルを格納するhstore。私はすべてのロケールで検索したいと思います。私がやってしまったことはそうのようなカスタムスコープを使用していただけでなくen、しかしfresruなど

+0

[フィルタに関するwiki記事](https://github.com/activeadmin/activeadmin/wiki#index-pages-filters-and-scopes)を調べましたか? –

答えて

0

# Ransackable Scopes 
def self.ransackable_scopes(_auth_object = nil) 
    [:by_title] 
end 

# My scopes 
scope :by_title, ->(search_term) { by_field(search_term, :title) } 

scope :by_field, lambda { |search_term, field| 
    where("#{field}_translations -> :key ILIKE :value", key: :en, value: "%#{search_term}%") 
    .or(where("#{field}_translations -> :key ILIKE :value", key: :fr, value: "%#{search_term}%")) 
    .or(where("#{field}_translations -> :key ILIKE :value", key: :de, value: "%#{search_term}%")) 
} 

それは正確に質問に答えるが、それソリューションでしたしません私のために働いた必要があります。

関連する問題