【问题标题】: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 个条件组合成 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)