1

我正在使用 Ruby on Rails 3.2.2,并且鉴于我已经说明了该问题涉及的所有需要​​的类/模型,我想构建以下 SQL 查询语句(注意 SQL OR)“a là Ruby on Rails 方式”:

SELECT customers.* FROM customers WHERE (firstname = 'James' OR firstname = 'Paula') AND lastname = 'Brown'

是否可以使用 Rails 设施?

4

3 回答 3

1

如果您不想使用像squeel这样的任何外部 gem,一个很好的方法是为此目的构建一个范围:

scope :by_first_and_last_name, ->(firsts, last) { 
   where(['firstname in (?) AND lastname = ?', firsts, last])
}

由于它返回一个 Arel,因此您可以将其与其他范围正常链接。

你可以像这样使用它:

YourModel.by_first_and_last_name(['Foo','Bar'], 'Baz').first
于 2012-06-05T18:23:54.037 回答
1

OR以下代码将允许您与firstname 字段上的多个 s 具有相同的效果:

Customer.where(['firstname IN (?) AND lastname = ?', ['James', 'Paula'], 'Brown'])
于 2012-06-05T18:41:30.727 回答
0

您并不是真的在寻找 OR。相反,您正在寻找一个 IN。

SELECT customers.* FROM customers WHERE firstname IN ('James','Paula') AND lastname = 'Brown'

这在 Rails 中已经得到了很长时间的支持(可能是从一开始)。您可以在查找结果中指定一个值数组而不是单个值。

@firstnames = ['James','Paula']
@lastname = 'Brown'
@customers = Customer.find_all_by_firstname_and_lastname(@firstnames,@lastname)
于 2012-06-05T19:50:19.047 回答