1

私はRubyonRails 3.2.2を使用しており、この質問に関係するすべての必要なクラス/モデルを述べたので、次のSQLクエリステートメント(SQLに注意OR)「alàRubyonRailsway」を作成したいと思います。

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

Railsの設備を利用することは可能ですか?

4

3 に答える 3

1

OR次のコードでは、firstname フィールドに複数の を指定した場合と同じ効果が得られます。

Customer.where(['firstname IN (?) AND lastname = ?', ['James', 'Paula'], 'Brown'])
于 2012-06-05T18:41:30.727 に答える
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 に答える
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 に答える