不同但关联的表中的字段可以具有相同的名称是 Rails 4

Can fields in different but associated tables have the same name is Rails 4

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

谢谢

不会有任何问题,因为 Rails 会在需要时自动将 table 名称添加到它构建的 SQL 查询中。您将能够轻松访问该属性,因为 shipping.EnterTrackingNoreceiving.EnterTrackingNoshipping.receiving.EnterTrackingNoreceiving.shipping.EnterTrackingNo 等,并且 Rails 知道哪个 table 你说的是因为它们的书写方式。

即使当您搜索一个对象时,假设您想要搜索具有 EnterTrackingNo == 3 的接收项目的所有运输

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

唯一要记住的是,如果您使用 SQL 片段(例如将 where 写成字符串),您必须将其写成 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 当你只给它一个字符串时不能告诉它需要一个连接。