ActiveRecord: ассоциации has_many и оператор === - PullRequest
2 голосов
/ 16 июня 2010

Может кто-нибудь объяснить мне эту загадку Ruby on Rails?

 class Post < ActiveRecord::Base
   has_many :comments
 end

 Post.first.comments.class
 => Array

 Array === Post.first.comments
 => false

 Array === [ 1 ]
 => true

1 Ответ

2 голосов
/ 16 июня 2010

Post.first.comments является делегатом. Он не возвращает вам массив напрямую, но если вы что-то с ним делаете, он превращается в один. Это полезно, потому что позволяет делать такие вещи, как

Post.first.comments.all(:conditions => {:author_name => 'RJH'})

без необходимости внедрения этих методов в объект массива или расширения класса Array.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...