【问题标题】:How to construct arel query with 'and' and 'or' on different tables?如何在不同的表上使用'and'和'or'构造arel查询?
【发布时间】:2014-05-11 19:04:17
【问题描述】:

2 个型号:DimensionDimensionType

DimensionTypehas_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

【问题讨论】:

    标签: ruby-on-rails activerecord arel


    【解决方案1】:

    你可以在你的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]})
    

    【讨论】:

    • 谢谢,但这不会多次调用查询吗?理想情况下,我只有 1 个选择。
    猜你喜欢
    • 2023-03-18
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    相关资源
    最近更新 更多