Там не будет проблемой, как Rails автоматически добавит имя таблицы в SQL запросов, которые он строит, когда это необходимо. Вы легко сможете получить доступ к атрибуту либо как shipping.EnterTrackingNo
, receiving.EnterTrackingNo
, shipping.receiving.EnterTrackingNo
, receiving.shipping.EnterTrackingNo
и т. Д., И Rails знает, из какой таблицы вы говорите, из-за того, как они написаны.
Даже при поиске объекта, скажем, вы хотите, чтобы найти все отгрузок с пункта получающего, который имеет EnterTrackingNo == 3
вы могли бы сделать
Shipping.includes(:receiving).where(receiving: { EnterTrackingNo: 3 })
Единственное, что нужно иметь в виду, что если вы используете SQL-фрагменты (например, запись в качестве строки), вы ДОЛЖНЫ записать его как имя_таблицы., Иначе вы получите 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 не может сказать, что ему требуется соединение, когда вы просто передаете ему строку.
Нет, таких вопросов не будет. – jaspreet21anand