在活动管理员中按多个 hstore 键过滤
Filter by multiple hstore keys in active admin
我正在尝试为 hstore
字段添加自定义筛选字段。
在 activeadmin 中:filter :by_title, label: 'Title', as: :string
模型中:
ransacker :by_title do |parent|
Arel::Nodes::InfixOperation.new('->',
parent.table[:title_translations], Arel::Nodes.build_quoted('en'))
end
此代码正在搜索,根据 activeadmin 选择(包含、等于、starts_with 或 ends_with)创建正确的查询
我使用 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}%"))
}
它并没有完全回答问题,但这是一个满足我需要的解决方案。
我正在尝试为 hstore
字段添加自定义筛选字段。
在 activeadmin 中:filter :by_title, label: 'Title', as: :string
模型中:
ransacker :by_title do |parent|
Arel::Nodes::InfixOperation.new('->',
parent.table[:title_translations], Arel::Nodes.build_quoted('en'))
end
此代码正在搜索,根据 activeadmin 选择(包含、等于、starts_with 或 ends_with)创建正确的查询
我使用 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}%"))
}
它并没有完全回答问题,但这是一个满足我需要的解决方案。