Ruby on rails 3 WHERE子句与或

Ruby on rails 3 WHERE子句与或,ruby-on-rails-3,activerecord,Ruby On Rails 3,Activerecord,目前我有以下几行: scope :within_date_range, ->(start_date, end_date) { where("(start_date BETWEEN ? AND ?) OR (end_date BETWEEN ? AND ?)", start_date, end_date, start_date, end_date) } 有没有一种更优雅的方法可以使用类似的工具来实现这一点 scope :within_date_range, ->(start_da

目前我有以下几行:

scope :within_date_range, ->(start_date, end_date) {
  where("(start_date BETWEEN ? AND ?) OR (end_date BETWEEN ? AND ?)", start_date, end_date, start_date, end_date)
}
有没有一种更优雅的方法可以使用类似的工具来实现这一点

scope :within_date_range, ->(start_date, end_date) {
  where((:start_date => start_date..end_date) OR (:end_date => start_date..end_date))
}
使用:

t = Post.arel_table
Post.where(t[:start_date].eq(start_date..end_date).or(t[:end_date].eq(start_date..end_date)))
Post.where('start_date BETWEEN (:start_date) AND (:end_date) OR end_date BETWEEN (:start_date) AND (:end_date)', :start_date => (start_date..end_date), :end_date => (start_date..end_date))