Rails 5.1 .any?和 .exists?原因未知列

Rails 5.1 .any? and .exists? causes unknown column

提问人:sneakyfishies 提问时间:9/22/2023 更新时间:9/22/2023 访问量:73

问:

我正在使用 Rails,并且遇到了引用 schema.rb 中定义的表的模型问题:

create_table "test_table", primary_key: ["somthing", "somthing1"]...

我相信这代表了一个复合主键。但是,我不确定 Rails 如何通过 schema:dump 生成它。

使用此模型时,我可以使用 成功检索所有记录,这将返回预期的数据。但是当我尝试使用 时,我遇到以下错误:TestTable.allTestTable.all.exists?

ActiveRecord::StatementInvalid (TinyTds::Error: Invalid column name '"somthing", "something1"'.: EXEC sp_executesql N'SELECT 1 AS one FROM [testtable] ORDER BY [testtable].["something", "somthing1"] ASC OFFSET 0 ROWS FETCH NEXT @0 ROWS ONLY', N'@0 int', @0 = 1)

对于任何使用 和.any?.exists?

为了解决这个问题,我尝试使用宝石。composite_primary_keys

self.primary_keys = :something, :something1

不幸的是,这导致了同样的错误。

我不知如何进行。似乎 Rails 直接使用架构中数组中定义的主键。值得注意的是,此数据库是预先存在的,并且可用的迁移文件并不多。我不确定这是否会导致问题,但我认为它可能是相关的。

任何见解或解决方案将不胜感激。

Ruby-on-Rails ActiveRecord Ruby-on-Rails-5

评论

2赞 mechnicov 9/22/2023
题外话:这种复合主键的优点是什么?迁移到通常的 PK 并在这两列上创建唯一约束可能更好?
2赞 Ben Garcia 9/22/2023
呃。Rails 刚刚在 Rails 7.1 中添加了复合主键,截至撰写本文时,该主键仍处于测试阶段。您可以在此处的更改日志中自己看到它:edgeguides.rubyonrails.org/...。你的写作方式让人觉得你没有写这段代码。composite_primary_keys是否已经安装?
0赞 sneakyfishies 9/22/2023
@BenGarcia,我安装并添加了复合键 gem。我正在尝试慢慢升级到 rails 6。这是一个相当古老的代码库。
0赞 smathy 9/22/2023
您是否尝试过重新排序 Gemfile
0赞 Ben Garcia 9/23/2023
在添加复合键 Gem 之前或之后,您在那里看到的主键语法@sneakyfishies?这里发生的事情令人困惑,因为你让它听起来像是你“遇到”了这个模式。有太多的未知数,谁写的,运行时的宝石,等等。

答: 暂无答案