2017-11-03 12 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하지만 fr, es, ru

+0

[필터에 관한 위키 문서] (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}%")) 
} 

을하지만, 솔루션였습니다 나를 위해 일했다.