Rails 4 ActiveRecord附加条件(多个.where)

时间:2016-01-11 03:06:21

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

我想附加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);

我不知道是否可能。

你可以给我一些建议吗?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

我们可以将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:)

答案 2 :(得分:0)

使用sql条件的范围

在模型中

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

的任何地方

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