【发布时间】:2011-05-09 18:27:39
【问题描述】:
关联方法(例如
has_many和belongs_to定义的那些方法)是否使用ActiveRecord::Relation?如果可以,是否可以得到正在使用的
ActiveRecord::Relation对象。
我们都知道 Rails 3 在使用Query Interface 创建查询时大量使用ActiveRecord::Relation 对象,并在后台使用Arel::Relation 对象。每当我们使用查询接口的select、joins等方法时,都会返回一个ActiveRecord::Relation对象。但是,在调用模型的关联方法时,情况似乎并非如此。相反,查询会立即执行并返回关联模型的一个实例或实例数组。
考虑以下模型:
post.rb
class Post < ActiveRecord::Base
belongs_to :user
end
user.rb
class user < ActiveRecord::Base
has_many :posts
end
例子:
u = User.first
u.posts
调用u.posts 返回一个帖子数组,而不是ActiveRecord::Relation 的实例。我想知道是否有可能获得被协会使用的ActiveRecord::Relation,如果它正在被使用,也许是通过使用Arel::Table?
我想要ActiveRecord::Relation 的理由应该很明显:这是因为我想链接现有的关联并操纵查询以适应不同的目的。
【问题讨论】:
标签: activerecord ruby-on-rails-3 associations arel