#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