gpt4 book ai didi

sql - 我怎样才能让 Rails 5 与其中有一个句点的主键一起玩?

转载 作者:行者123 更新时间:2023-12-04 17:15:49 24 4
gpt4 key购买 nike

我正在使用一个我无法控制且无法更改的数据库。该数据库有一个名为 warehouse_items 的表。每个仓库元素都由指示元素 ID 的主键唯一标识。

不幸的是,该主键属性名为 WAREHOUSE_ITEM.ID

(注意“item”和“id”之间令人讨厌的句号)


当我尝试运行基本查询时,例如:

WarehouseItem.find('wh3453')

我收到一个未定义表错误。

幸运的是,当查看 Rails 试图做什么时,问题变得很明显:

: SELECT  "warehouse_items".* FROM "warehouse_items" WHERE "WAREHOUSE_ITEM"."ID" = $1 LIMIT $2

由于属性名称中的句点,Rails 将“WAREHOUSE_ITEM.ID”视为表/属性组合,而不是带有句点的属性名称。

当我手动运行以下 PSQL 查询时,我得到了我所需要的:

SELECT  "warehouse_items".* FROM "warehouse_items" WHERE "warehouse_items"."WAREHOUSE_ITEM.ID" = 'wh3453'

为什么 Rails 搞砸了,我该如何解决?


编辑:

同样值得注意的是:我试过使用 self.primary_key 来覆盖主键,但没有成功。

我已经尝试了字符串和符号,如:

self.primary_key="WAREHOUSE_ITEM.ID"

self.primary_key=:"WAREHOUSE_ITEM.ID"

没有一个工作...

最佳答案

感谢大家的帮助!

评论中关于使用 find_by_sql 的建议确实有效!但是,我偶然发现了一个效果更好的不同解决方案。

首先,我将烦人的属性名称别名为简单的名称:id

alias_attribute :id, :"WAREHOUSE_ITEM.ID"

请注意,它仍然是一个符号,这对下一步很重要。

然后我用自定义函数覆盖 primary_key 方法:

  def self.primary_key
return "id"
end

现在,当我执行 WarehouseItem.find('wh3453') 时,Rails 默认检查 id,它是正确符号的别名并且按预期工作! !!

关于sql - 我怎样才能让 Rails 5 与其中有一个句点的主键一起玩?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68764403/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com