Ruby on Rails ActionController:范围与包容性或

时间:2015-11-27 12:57:06

标签: ruby-on-rails ruby activerecord scope conditional-statements

我想将两个范围条件与包含or结合起来。

我尝试使用:scope :myscope, lambda { |u| where(cond1: u.id) or where(cond2: u.id)},但它不起作用。我该怎么办?

4 个答案:

答案 0 :(得分:0)

您可以使用查询方法#or

where(cond1: u.id).or(cond2: u.id)

答案 1 :(得分:0)

Rails 5将实现" OR"正如@jphager2的答案所说,但同时你必须弄脏你的手:

scope :myscope, lambda {where ["cond1 = ? OR cond2 = ?", u.id, u.id]}

答案 2 :(得分:0)

你可以这样做: -

scope :myscope, lambda { |u| where('cond1 = ? OR cond2 = ?', u.id, u.id)}

答案 3 :(得分:0)

ActiveRecord提供了一些绕过编写SQL需求的方法,但在这种情况下,您需要花费很少的精力并编写一小段SQL。

scope :myscope, -> { |u| where("cond1 = ? OR cond2 = ?", u.id, u.id) }

您还可以更简洁并使用

scope :myscope, -> { |u| where("cond1 = :id OR cond2 = :id", id: u.id) }

编写一些SQL没有错。不要陷入陷阱“如果我不能用Ruby写它,它是丑陋的或不是Rails方式”。