2个型号:Dimension
和DimensionType
DimensionType
has_many :dimensions
如何使用arel
或经典ActiveRecord
构建此类查询:
select * from dimension_types dt
inner join dimensions d on d.dimension_type_id=dt.id
where
(dt.identifier = 'geo' and d.identifier in ('uk','us'))
or
(dt.identifier = 'unit' and d.identifier in ('bn', 't'))
我需要选择的维度和维度类型的数量是动态的,例如:
queryArguments = {geo: [:uk, :us], unit: [:t, :bn], x: [:y, :etc]}
我正在使用Rails 4
答案 0 :(得分:0)
你可以在DimensionType
建模这样的东西:
def self.search params
params.keys.inject([]) do |result, dt_identifier|
result += DimensionType.joins(:dimensions).where("dimension_types.identifier", dt_identifier).where(["dimensions.identifier IN (?)", params[dt_identifier]])
end
end
然后,您可以像这样使用它:
DimensionType.search({geo: [:uk, :us], unit: [:t, :bn], x: [:y, :etc]})