web-dev-qa-db-ja.com

ActiveRecord 3 / Arelを使用して単一のレコードを見つける最良の方法は?

私がこれを行うために使用した場所:

Foo.find_by_bar('a-value')

私はこれを行うことができます:

Foo.where(:bar => 'a-value').limit(1).first

これはお勧めですか?これは最善の方法ですか? 「古い」方法を引き続き使用する必要があるのは、それが有用な構文シュガーであるためです。それとも、チェーンや他のすべての優れた機能をサポートする、今より良い方法がありますか?

36
John Bachir

Rails 4:

Foo.find_by bar: 'a_value' , wibble: 'a wibble value'
45
SureshCS

単一のレコードを返すための望ましい方法は、2番目の例に沿ったものになると思いますが、制限部分は省略できます。

Foo.where(:bar => 'a-value').first

これは新しい構文に従い、ルックアップに条件を追加したい場合に連鎖をサポートします。

22
nmunson

Railsは、この種のもののための魔法のメソッドの完全なロードを提供します。

Foo.find_by_bar('a-value')

複数の属性を使用することもできます。

Foo.find_by_bar_and_wibble('a foo value', 'a wibble value')

そして!何も見つからない場合はRecordNotFoundをスローします。

Foo.find_by_bar!('a-value')
4
Will Tomlins

その他の代替:

Foo.find(:first, conditions: { bar: 'a-value' })

複数の属性を使用することもできます。

Foo.find(:first, conditions: { bar: 'a-value' , wibble: 'a wibble value' })
2
Victor Lellis