Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Rails-与两个参数有一个关联_Sql_Ruby On Rails_Rails Activerecord - Fatal编程技术网

Sql Rails-与两个参数有一个关联

Sql 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

我有一个名为assets的表,它有许多版本。版本有版本号。每个资产还具有一个版本号列,该列指示最新(最新)版本

我想在资产和它的最新版本之间建立一个关联,但是我找不到任何关于如何做到这一点的文档。从理论上讲,它看起来像这样

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.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)