【问题标题】:Rails: any way to preload (include) parent associationRails:预加载(包括)父关联的任何方式
【发布时间】:2011-06-30 04:30:54
【问题描述】:

我有一个带有以下型号的 Rails 2.3 应用程序。

class Message << AR::Base
  has_many :message_copies
end


class MessageCopy << AR::Base
  belongs_to :message
end

每当我查询 MessageCopy 时,我总是需要引用父消息的属性。所以我总是以预加载(通过 :include => :message)来减少数据库查询的数量。

到目前为止,我想出了这个:

named_scope :with_parent_msg, :include => :message

这让我很容易做到这一点:

@user.message_copies.with_parent_msg

有没有更好的方法来做到这一点?所以我不必总是调用 with_parent_msg 吗?

接受任何建议。谢谢!

【问题讨论】:

    标签: ruby-on-rails activerecord include scope preload


    【解决方案1】:

    您可以为此定义一个default_scope

    class MessageCopy << AR::Base
      belongs_to :message
      default_scope include(:message)
    end
    

    【讨论】:

    • 我假设语法在某些时候发生了变化,但这是 Rails 5.x 的正确语法:default_scope { includes(:message) }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多