Могут ли поля в разных, но связанных таблицах иметь одинаковое имя Rails 4
Могут ли поля в разных, но связанных таблицах иметь одинаковые имена Rails 4 и быть разными. Например, если у меня есть класс Shipping и класс Receiving, у каждого из которых есть поле EnterTrackingNo, и они связаны через однозначное сопоставление в поле shipping_id, возникнут ли какие-либо проблемы с этой настройкой / поля каким-то образом перекрываются / мешать друг другу?
Спасибо
1 ответ
Там не будет никаких проблем, так как Rails автоматически добавит имя таблицы в запросы SQL, которые он создает, когда это необходимо. Вы сможете легко получить доступ к атрибуту как shipping.EnterTrackingNo
, receiving.EnterTrackingNo
, shipping.receiving.EnterTrackingNo
, receiving.shipping.EnterTrackingNo
и т. д. и Rails знает, о какой таблице вы говорите, благодаря тому, как они написаны.
Даже если вы ищете объект, скажем, вы хотите найти все отгрузки с получающим элементом, который имеет EnterTrackingNo == 3
ты бы сделал
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 не может сказать, что ему нужно соединение, когда вы просто даете ему String.