Могут ли поля в разных, но связанных таблицах иметь одинаковое имя 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.

Другие вопросы по тегам