我正在使用 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 设施?
我正在使用 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 设施?
如果您不想使用像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
OR
以下代码将允许您与firstname 字段上的多个 s 具有相同的效果:
Customer.where(['firstname IN (?) AND lastname = ?', ['James', 'Paula'], 'Brown'])
您并不是真的在寻找 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)