Rails查询对象类有什么不同?

时间:2012-05-17 09:07:31

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

@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吗

1 个答案:

答案 0 :(得分:2)

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

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