0

尝试使用 Rails 3 理解这种行为:

如果我这样做:

@comments_1 = @article.comments

我可以在@comments_1 上运行 ActiveRecord 类型的查询,例如@comments_1.find(1)并获得一条记录/对象作为回报。

=> #<Comment id: 1, body: "lorem ipsum ...">

然而,这:

@comments_2 = Comment.all

不接受此类查询。@comments_2.find(1)返回:

=> [#<Comment id: 1, body: "lorem ipsum …">, … ]:find(1)]

(1) 为什么这些输出不同?

(2) 如何使@comments_2 数组的行为与@comments_1 相同?

4

2 回答 2

2

Comment.all返回一个Array包含所有评论的。而@article.comments返回一个Relation. ARelation与数组有很多共同点,但 is 不是数组。

关于关系:http ://api.rubyonrails.org/classes/ActiveRecord/Relation.html

于 2013-10-05T13:03:34.487 回答
1

查询方法适用于ActiveRecord, Relation(来自关联)等。所以当你这样做时:

@article.comments

结果是一个对象 ( Relation),您可以使用whereorfind等​​对其进行操作。

但是,当您这样做时:

Comment.all

甚至这个

@article.comments.all

您已经创建了一个 RubyArray对象。ActiveRecord 查询方法不是Array该类的一部分。

于 2013-10-05T13:03:56.823 回答