ruby-on-rails - 避免加载关联关系对象

标签 ruby-on-rails ruby ruby-on-rails-3 object associations

我正在使用 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/

相关文章:

mysql - 在 Rails3、 Octopus 复制 gem 查询错误期间丢失与 MySQL 服务器的连接

ruby-on-rails - Postgres 还是 database_cleaner?

ruby-on-rails - 未初始化常量 ActiveSupport::Dependency::Mutex (NameError)

ruby-on-rails - 当存在相同的键时,Rails 中的查询字符串操作

css - 在 Regexp 中匹配 CSS 注释

ruby-on-rails - 将对象添加到收藏夹对象数组中

ruby-on-rails - 语言环境不在 Rails 4 中切换

Windows 上的 Ruby gems 主页

ruby - 禁用 Rubocop 参数列表长度

ruby - 在 rails3/jruby 中,什么会间歇性地导致这个错误? SAVEPOINT active_record_1 不存在