Слияние ссылочного поля отношений в Mongoid
В монгодской модели ниже, как я могу связать поле отношения belongs_to
?
class Contact
field :nm, :as => :name, :type => String # field aliasing
embeds_one :address, :store_as => :ad # embedded document aliasing
belongs_to :account # referenced relation doesn't support store_as
end
Я хочу сохранить идентификатор учетной записи в поле с именем ac
вместо account_id
.
Ответы
Ответ 1
Вы можете использовать: foreign_key для указания имени поля mongodb.
belongs_to :account, foreign_key: :ac
Однако, если вы хотите использовать account_id, вам нужно объявить его псевдоним:
alias :account_id :ac
или определить account_id перед свойством:
field :account_id, as: :ac
Ответ 2
Mongoid позволяет использовать произвольное имя для отношения, используя 'inverse_of'
Если инверсия не требуется, например, принадлежность_или или has_and_belongs_to_many, убедитесь, что: inverse_of = > nil задано на связь. Если требуется обратное, то, скорее всего, обратное не может быть выяснилось из названий отношений, и вам нужно будет явно сообщают Mongoid о том, что такое обратное.
Итак, для использования "ac" в качестве псевдонима необходимо добавить inverse_of
:
class Contact
field :nm, :as => :name, :type => String # field aliasing
embeds_one :address, :store_as => :ad # embedded document aliasing
belongs_to :ac, class_name: 'Account', inverse_of: :contact
end
class Account
has_one :contact, class_name: 'Contact', inverse_of: :ac
end