2
@category = Category.where(:category_name => 'cricket')
@category.class

这里@category 的类是“ActiveRecord::Relation” 但是,

@category = Category.all(:conditions => { :category_name => 'cricket' })
@category.class

在这种情况下,@category 的类是“Array”

两个查询的结果是相同的,那么类也是不同的。 为什么?

还有一件事......在第一种情况下,我可以做@category.title 或@category.body 等。但在第二种情况下,这是不可能的。 为什么?

4

1 回答 1

2

在第一种情况下,您实际上是在使用默认范围并将其与where部件一起归因。这意味着,当您要使用此 Relation 的项目时,它将按需运行 SQL 查询。将其视为已准备好但尚未运行查询,这将在需要时产生值,并且您可以进一步指定参数,例如您可以附加另一个 where 子句或其他内容。当然它比简单的数组更聪明,因为这背后的实现更复杂。

在第二种情况下,您立即从数据库中获取所有记录,因此结果是一个包含结果的数组。与另一部相比,它非常愚蠢。

于 2012-05-17T09:17:52.247 回答