Rails 4 中不同但关联的表中的字段是否可以具有相同的名称并且是不同的。例如,如果我有一个 Shipping 类和一个 Receiving 类,每个类都有 EnterTrackingNo 字段,并且它们通过字段 shipping_id 上的一对一关联关联,那么此设置是否会有任何问题/字段以某种方式重叠/互相干扰?
谢谢
Rails 4 中不同但关联的表中的字段是否可以具有相同的名称并且是不同的。例如,如果我有一个 Shipping 类和一个 Receiving 类,每个类都有 EnterTrackingNo 字段,并且它们通过字段 shipping_id 上的一对一关联关联,那么此设置是否会有任何问题/字段以某种方式重叠/互相干扰?
谢谢
不会有任何问题,因为 Rails 会在需要时自动将表名添加到它构建的 SQL 查询中。您可以通过shipping.EnterTrackingNo
、receiving.EnterTrackingNo
、shipping.receiving.EnterTrackingNo
、receiving.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 不能告诉它需要一个连接。