Sql Rails-与两个参数有一个关联
我有一个名为assets的表,它有许多版本。版本有版本号。每个资产还具有一个版本号列,该列指示最新(最新)版本 我想在资产和它的最新版本之间建立一个关联,但是我找不到任何关于如何做到这一点的文档。从理论上讲,它看起来像这样 asset.rbSql Rails-与两个参数有一个关联,sql,ruby-on-rails,rails-activerecord,Sql,Ruby On Rails,Rails Activerecord,我有一个名为assets的表,它有许多版本。版本有版本号。每个资产还具有一个版本号列,该列指示最新(最新)版本 我想在资产和它的最新版本之间建立一个关联,但是我找不到任何关于如何做到这一点的文档。从理论上讲,它看起来像这样 asset.rb has_one :latest, class_name: "Version", foreign_key: ["asset_id", "version_number"], primary_key: ["id", "version_number"] def l
has_one :latest, class_name: "Version", foreign_key: ["asset_id", "version_number"], primary_key: ["id", "version_number"]
def latest
Version.where(asset_id: asset.id, version_number: asset.version_number).first
end
天真的做法是:
asset.rb
has_one :latest, class_name: "Version", foreign_key: ["asset_id", "version_number"], primary_key: ["id", "version_number"]
def latest
Version.where(asset_id: asset.id, version_number: asset.version_number).first
end
但是,在代码中这样做的问题是,我无法在资产的关联缓存中加载“最新的”。在加载一组资产时,我也无法轻松地加载所有关联的“最新”记录,例如Asset.includes(:latest).where(project\u id:7)
我认为这应该是可能的,因为多态关联使用了两个参数。我实际上是在键入我的问题后发现了解决方案,这有助于我更好地表达问题。解决之道在于 TLDR 我不得不稍微调整一下行
“versions.version\u number=version\u number”
,因为在一些紧急加载情况下,SQL会抱怨密钥版本号不明确。因此,我添加了资产。
以消除歧义并解决问题。我会再次附和他们所说的,即无论何时包括(:latest)
,您都必须加入(:latest)