0

Program.where(name: "xxyyzz123")一致するレコードが1つしかない場合でも、コレクションを返します。これにより、次のような醜いことを余儀なくされます。

puts Program.where(name: "xxyyzz123").first.age

また

puts Program.where(name: "xxyyzz123")[0].age

確実に 1 つのレコードのみが一致することがわかっている場合、その 1 つのレコードからプロパティを取得するより短い方法はありますか?

4

2 に答える 2

1

はい、 でアクセスする必要がありますがProgram.where(name: "xxyyzz123").first.age、Rails 3 では通常、そのタイプのクエリを で実行することをお勧めしますProgram.find_by_name('xxyyzz123').age

Rails 4 は上記の構文を廃止し、次の構文を使用することをお勧めします:
Program.find_by(name: 'xxyyzz123')
複数の条件がある場合は、単に :Program.find_by(name: 'xxyyzz123', lang: 'ruby')
舞台裏で同じ tomfoolery -where句を実行し、最初のオブジェクトを返します。

于 2013-06-04T22:59:39.783 に答える
1

ActiveRecord の動的な属性ベースのファインダー (find_by_x) を使用すると、データベース内で一致する最初のレコードを選択できます。例えば:

Program.find_by_name('xxyyzz123')

name = 'xxyyzz123' の最初のレコードを返します

これらのファインダーは、Rails 4 では「軽度に非推奨」になっていることに注意してください。

Program.find_by(name: 'xxyyzz123") 

同じことを実現し、Rails の次のバージョンに更新する必要がある場合に、前者の機能が削除された場合に簡単になる可能性があります。

詳細については、APIのActiveRecord::Base を参照してください。

于 2013-06-04T22:51:18.447 に答える