Active Recordでよく使われるfind
やwhere
などのメソッドの返り値について調べたらこうなった.
※ Comment
の部分は, Comment
という名前のモデルを意味しています. 検索条件に該当したレコードのインスタンスが返ってきていることを意味します.
ちなみに以下のようにして調べた.
Comment.all.class
=> Comment::ActiveRecord_Relation
Comment.find(10401).class
=> Comment(id: integer, body: text, commentable_id: integer, user_id: integer, likes_count: integer, created_at: datetime, updated_at: datetime, commentable_type: string)
Comment.find(10401, 10402).class
=> Array
Comment.find_by_id(10401).class
=> Comment(id: integer, body: text, commentable_id: integer, user_id: integer, likes_count: integer, created_at: datetime, updated_at: datetime, commentable_type: string)
Comment.find_by({id:10401}).class
=> Comment(id: integer, body: text, commentable_id: integer, user_id: integer, likes_count: integer, created_at: datetime, updated_at: datetime, commentable_type: string)
Comment.where({id:10401}).class
=> Comment::ActiveRecord_Relation
Comment.all.page(10).class
=> Comment::ActiveRecord_Relation
Comment.all.first.class
=> Comment(id: integer, body: text, commentable_id: integer, user_id: integer, likes_count: integer, created_at: datetime, updated_at: datetime, commentable_type: string)
Comment.all.last.class
=> Comment(id: integer, body: text, commentable_id: integer, user_id: integer, likes_count: integer, created_at: datetime, updated_at: datetime, commentable_type: string)
Comment.includes(:user).class
=> Comment::ActiveRecord_Relation
Comment.order('created_at DESC').class
=> Comment::ActiveRecord_Relation
・ ActiveRecord_Relation ってなんぞ
ActiveRecord_Relation
が返ってきた時点ではまだSQLは発行されていない. 描画に必要になったときに初めてSQLが発行される仕組み成っている. また, メソッドチェーンでwhere
やorder
などを続けて書くことができる, という便利な機能.