我正在使用 Ruby on Rails 3.0.7,出于性能原因,我想避免在检索类对象时加载关联对象。也就是说,如果我有一个带有 has_many :users
语句的 Article
class\model 我不想在检索时加载关联的 User
对象Article
对象(我认为这种行为取决于 Ruby on Rails 的“约定优于配置”原则)。
我该怎么做?
最佳答案
正如 Yet Another Geek 所指出的,Rails (ActiveRecord) 默认不加载关系对象。相反,它会在您要求时去获取它们。如果你不需要那个关系的对象,它永远不会费心加载它们,从而节省了数据库时间。
如果您确实需要,它会延迟检索它们(默认情况下)。如果您知道您将需要关系中的所有(或许多)对象(假设 x 对多),那么您可以使用 :include
修饰符到您的 find
来预先获取它们(这会快很多,因为它可以通过单个数据库调用来完成)。了解并利用预先加载关系对象的能力是一件很重要的事情。
@person = Person.find(params[:id], :include => :friends)
综上所述,您想要的行为(如果不需要则不加载对象)是默认行为,您应该已准备就绪。剩下的答案只是一些可能对您以后有用的上下文。
关于ruby-on-rails - 避免加载关联关系对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6403082/