【问题标题】:Rails 4 ActiveRecord append conditions (multiple .where)Rails 4 ActiveRecord 附加条件(多个 .where)
【发布时间】:2016-01-11 03:06:21
【问题描述】:

我想附加AND 条件取决于这样的条件:

@flag = true || false;

@results = Model.where(conditions).where(conditions_depend_on_flag);

// 简单的方法:

if (@flag) {
    @results = Model.where(conditions);
} else {
    @results = Model.where(conditions).where(conditions_depend_on_flag);
}

我的预期示例:

@results = Model.where(conditions).where(conditions_depend_on_flag, @flag == true);

不知道有没有可能。

你能给我一些建议吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 activerecord rails-activerecord


    【解决方案1】:
    @results = Model.where(conditions)
    @results = @results.where(conditions_depend_on_flag) if @flag
    

    【讨论】:

    • 这会运行 2 个单独的查询吗?
    • 不,它只是创建一个关系。
    【解决方案2】:

    我们可以将 2 个条件组合成 1 个 where 语句:

    为方便起见,我假设:

    conditions                = created_at < 1.day.ago
    conditions_depend_on_flag = updated_at > 1.day.ago
    

    所以查询将是:

    Model.where(
        'created_at < ? AND (? OR updated_at > ?)', 1.day.ago, !@flag, 1.day.ago
    )
    

    漂亮的 SQL :)

    【讨论】:

      【解决方案3】:

      为 sql 条件使用作用域

      在模型中

      scope :conditions_depend_on_flag, ->(flag) { where(....) if flag }
      

      任何地方

      @results = Model.where(conditions).conditions_depend_on_flag(@flag)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-18
        • 2016-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-11
        相关资源
        最近更新 更多