Ruby on rails 在active admin中按多个hstore键进行筛选
我正在尝试为Ruby on rails 在active admin中按多个hstore键进行筛选,ruby-on-rails,postgresql,activeadmin,ransack,Ruby On Rails,Postgresql,Activeadmin,Ransack,我正在尝试为hstore字段添加自定义筛选字段 在activeadmin中:filter:by_title,标签:'title',as::string 在模型中: ransacker :by_title do |parent| Arel::Nodes::InfixOperation.new('->', parent.table[:title_translations], Arel::Nodes.build_quoted('en')) end 此代码正在搜索并根据activead
hstore
字段添加自定义筛选字段
在activeadmin中:filter:by_title,标签:'title',as::string
在模型中:
ransacker :by_title do |parent|
Arel::Nodes::InfixOperation.new('->',
parent.table[:title_translations], Arel::Nodes.build_quoted('en'))
end
此代码正在搜索并根据activeadmin选择创建正确的查询(包含、等于、以开头或以结尾)
我使用hstore存储多个地区的标题。我想搜索所有区域设置。不仅
en
,而且fr
,es
,ru
,等等我最后使用的是这样一个自定义范围:
# 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}%"))
}
它并没有完全回答这个问题,但它是一个适合我需要的解决方案。您查看了吗?谢谢,我正在搜索解决方案,以便在我的active Admin中为jsonb数据添加过滤器,这节省了我的时间