4

私はレールに不慣れで、where メソッドを使用してデータ テーブルからレコードを取得しようとしています。ただし、それを使用しても結果は返されないようです。

employee = Employee.where("first_name = ?", "bill")  #doesn't work

employee = Employee.where(:first_name => "bill")  #doesn't work

employee = Employee.find_by_first_name("bill")  #works

印刷して結果をテストしていますがemployee.first_name、最初の 2 つは何も返さないのに対し、3 番目は「請求書」を返します。何が起きてる?

4

2 に答える 2

8

最初の2つは配列を返します(その名前のすべての従業員)。 Employee.find_by_first_name最初の結果のみを返します-Employee.find_all_by_first_name最初の2つのクエリのような配列を返す必要があります。

これが期待どおりに機能するかどうかを確認します。

Employee.where("first_name = ?", "bill").first

(完全を期すために、実際に返されるのは、配列のように機能Employee.whereするチェーン可能なスコープオブジェクトです)

于 2012-04-19T16:34:03.167 に答える
1

実行すると最初の2つはどうなりますemployee.first_nameか?Arrayにはメソッドがないため、メソッドなしの例外が発生するはずですfirst_name

where句を使用すると、最初に見つかった従業員モデルオブジェクトが自動的に返されません。ActiveRecord:: Relationshipが返され、アクセスしようとすると、railsによって自動的に配列に評価されます。where句は、first_name=="bill"を持つすべての従業員を返します

「bill」というfind_by_first_name名前の従業員が複数いる場合でも、はEmployeeクラスの単一のインスタンスのみを返します。

最初の2つを実行した後で試してみるとemployee.first.fist_name、データベース内のすべてが正しく、「bill」という名の従業員がいる場合に「bill」が表示されることがわかると思います。

于 2012-04-19T16:34:54.240 に答える