1

Rails 4 中不同但关联的表中的字段是否可以具有相同的名称并且是不同的。例如,如果我有一个 Shipping 类和一个 Receiving 类,每个类都有 EnterTrackingNo 字段,并且它们通过字段 shipping_id 上的一对一关联关联,那么此设置是否会有任何问题/字段以某种方式重叠/互相干扰?

谢谢

4

1 回答 1

0

不会有任何问题,因为 Rails 会在需要时自动将表名添加到它构建的 SQL 查询中。您可以通过shipping.EnterTrackingNoreceiving.EnterTrackingNoshipping.receiving.EnterTrackingNoreceiving.shipping.EnterTrackingNo等方式轻松访问该属性,并且 Rails 知道您在谈论哪个表,因为它们的编写方式。

即使您搜索一个对象,假设您想要搜索所有带有EnterTrackingNo == 3您想要做的 Receiving 项目的 Shippings

Shipping.includes(:receiving).where(receiving: { EnterTrackingNo: 3 })

唯一要记住的是,如果您使用 SQL 片段(例如,将 where 写为 String),您必须将其写为 table_name.attribute,否则您将得到一个SQLException: ambiguous column name. 例如:

Shipping.includes(:receiving).where("EnterTrackingNo = 3").references(:receivings)

不会像 Rails 一样工作,而且你的数据库无法知道你在说哪个 EnterTrackingNo。你必须把它写成:

Shipping.includes(:receiving).where("receivings.EnterTrackingNo = 3").references(:receivings)

所以他们知道你想要Receiving模型的属性。

您还会注意到我添加references(:table_name)了带有 SQL 片段的片段。这也是必要的,因为当你给它一个字符串时,Rails 不能告诉它需要一个连接。

于 2015-05-10T21:24:35.067 回答