我想知道是否有一种方法可以通过 ActiveRecord 从数据库中获取对象,而不需要 Rails 构建整个对象(只有几个字段)。
例如,我有时需要检查某个对象是否包含某个字段。假设我有一个引用 Bag 对象的 Student 对象(每个学生都有一个袋子)。我需要检查是否有女学生的包里有超过 4 支铅笔。
在 ActiveRecord 中,我必须这样做:
exists = Student.female.find(:all, conditions => 'bags.pencil_count > 4', :include => :bag).size > 0
问题是,如果有 1000 名学生符合这个条件,那么 AR 将构建 1000 个对象,包括他们的 1000 个包。
这减少了我对这个查询使用纯 SQL(出于性能原因),这破坏了 AR。我不会使用命名范围,如果命名范围中的某些内容发生变化,我必须记住在代码周围更新它们。
这是一个示例,但在更多情况下,出于性能原因,我必须使用 SQL 而不是让 AR 构建许多对象,这会破坏封装。
有没有办法告诉 AR 不要构建对象,或者只是构建某个字段(也在关联中)?