我正在使用Rails3,ActiveRecord
只是想知道如何用OR语句而不是AND来链接范围.
例如
Person.where(:name => "John").where(:lastname => "Smith")
Run Code Online (Sandbox Code Playgroud)
这通常会返回name ='John'和lastname ='Smith',但我想:
name ='John'或lastname ='Smith'
activerecord ruby-on-rails ruby-on-rails-3 rails-activerecord
我正在尝试合并两个范围或向现有范围添加更多内容。
scope :public_bids, -> {
where(status: [Status::ACCEPTED, Status::OUTBID, Status::SOLD, Status::NO_SALE],
bid_type: [BidType::MANUAL, BidType::AUTO, BidType::LIVE])
scope :outbid_maxbids, -> {
where(status: Status::OUTBID, bid_type: BidType::MAXBID)
Run Code Online (Sandbox Code Playgroud)
我无法确定如何将OR它们组合在一起或合并到一个范围中。有什么建议/指导吗?我更希望将它们合并到一个范围中。
在Rails3中我有:
Class Teacher
# active :boolean
has_and_belongs_to_many :subjects
Class Subject
# active :boolean
has_and_belongs_to_many :teachers
Run Code Online (Sandbox Code Playgroud)
我正在尝试构建一个教师范围,它返回与之相关的所有Teachers内容active或与之相关联的Subject内容active.
这些范围单独工作,但如何将它们作为单个范围与OR组合?
scope :active_teachers, where(active: true)
scope :more_active_teachers, joins(:subjects).where(:subjects => {active: true})
Run Code Online (Sandbox Code Playgroud)
我试过这个没有成功:
scope :active_teachers, where(active: true).or(joins(:subjects)
.where(:subjects => {active: true}))
Run Code Online (Sandbox Code Playgroud)
更新:
我以为我有一个解决方案,但这不再是懒惰的负载,两次点击数据库 - 最重要的是 - 返回一个数组而不是一个AR对象!
scope :active_teachers, where(active: true) |
joins(:subjects).where(:subjects => {active: true})
Run Code Online (Sandbox Code Playgroud)