不同但关联的表中的字段可以具有相同的名称是Rails 4并且是不同的。例如,如果我有一个类 运输 和一个类接收,其中每个都有字段 EnterTrackingNo,并且它们通过字段shipping_id上的一对一关联相关联,此设置是否会有任何问题/字段以某种方式重叠/相互干扰?
谢谢
不会有任何问题,因为 Rails 会在需要时自动将表名添加到它构建的 SQL 查询中。你可以很容易地访问这个属性,如shipping.EnterTrackingNo
、receiving.EnterTrackingNo
、shipping.receiving.EnterTrackingNo
、receiving.shipping.EnterTrackingNo
等,并且Rails知道你在说哪个表,因为它们的编写方式。
即使您搜索对象,也假设您想搜索所有带有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
模型的属性。
您还会注意到我在带有 SQL 片段的片段中添加了references(:table_name)
。这也是必要的,因为当你给它一个字符串时,Rails无法判断它需要一个连接。