Rails: принадлежит дважды одному и тому же полю

#ruby-on-rails

#ruby-on-rails

Вопрос:

Пожалуйста, кто-нибудь знает, могу ли я belongs_to дважды объявить отношение к одному и тому же полю?

Например:

 class Notice < ApplicationRecord
  belongs_to :avia, foreign_key: 'ticket_id', class_name: 'AviaTicket'
  belongs_to :bus, foreign_key: 'ticket_id', class_name: 'BusTicket'
end
  

Таким образом, я использую ticket_id дважды для разных моделей. И на belongs_to стороне это не работает, но на другой стороне ( AviaTicket , BusTicket ) работает нормально.

Ответ №1:

Когда вы выполняете a belongs_to в rails, вы подразумеваете, что модель имеет внешний ключ, который содержит id таблицу, к которой он принадлежит. Вам разрешено иметь столько belongs_to отношений, сколько вы хотите, однако все они должны иметь другой foreign_key . Ваши внешние ключи должны быть специфичны для таблиц, на которые вы ссылаетесь, например, внешний ключ AviaTicket должен быть foreign_key: 'avia_ticket_id' , и то же самое касается BusTicket , внешний ключ должен быть специфичен для этой таблицы, таким образом, rails знает, какой внешний ключ искать при попытке найти соответствующие данные.

Ответ №2:

Извините, ребята, решено! Ответ — да. Это не работает, потому что я использую modules в /models каталоге. И я забыл ::

И правильно объявить с моими модулями:

 //app/models/notice/notice.rb

class Notice::Notice < ApplicationRecord
.
.
  belongs_to :bus, foreign_key: 'ticket_id', class_name: '::BusTicket'
.
.
end