@category = Category.where(:category_name => 'cricket')
@category.class
这里的@category类是“ActiveRecord :: Relation” 但是,
@category = Category.all(:conditions => { :category_name => 'cricket' })
@category.class
在这种情况下,@ class的类是“Array”
两个查询的结果相同,然后类也不同。 的 WHY吗
还有一件事...... 在第一种情况下,我可以做@ category.title或@ category.body等。 但在第二种情况下,这是不可能的。 的 WHY吗
答案 0 :(得分:2)
在第一种情况下,您实际上使用的是默认范围,并将其与where
部分一起归属。这意味着,当您想要使用此Relation的项目时,它将按需运行SQL查询。想想它就像它已准备好但尚未运行查询,这将在需要时产生walues,并且您可以进一步指定参数,例如,您可以追加另一个where子句或其他内容。当然,它比简单的数组更聪明,因为实现背后更加复杂。
在第二种情况下,您立即从数据库中获取所有记录,因此结果是一个包含结果的数组。与另一个相比,它相当愚蠢。