0
我有兩個類,即Person
和Language
。每個語言具有創建者和更新者均來自Person
類。我想通過子查詢父代的屬性,反之亦然。訪問Mongoid中的父子屬性
Person類
class Person
include Mongoid::Document
field :first_name, type: String
field :last_name, type: String
has_many :created_languages, class_name: 'Language', inverse_of: :created_by, foreign_key: 'created_by_id', autosave: true
accepts_nested_attributes_for :created_languages
has_many :updated_languages, class_name: 'Language', inverse_of: :updated_by, foreign_key: 'updated_by_id', autosave: true
accepts_nested_attributes_for :updated_languages
end
語言類
class Language
include Mongoid::Document
field :content, type: String
belongs_to :created_by, class_name: 'Person', inverse_of: :created_languages, foreign_key: :created_by_id, autosave: true
accepts_nested_attributes_for :created_by
belongs_to :updated_by, class_name: 'Person', inverse_of: :updated_languages, foreign_key: :updated_by_id, autosave: true
accepts_nested_attributes_for :updated_by
end
我想在我的Rails應用程序來查詢如下:即在Rails的控制檯:
ruby 2.0.0p451 > a = Person.create!(first_name: "Marco", last_name:"Reus")
ruby 2.0.0p451 > b = Language.create!(content: "German", created_by_id: a.id, updated_by_id: a.id)
ruby 2.0.0p451 > a.created_languages (now works)
ruby 2.0.0p451 > a.updated_languages (now works)
ruby 2.0.0p451 > b.created_by (now works)
ruby 2.0.0p451 > b.updated_by (now works)
我用接收下面的錯誤。通過上面的代碼,它被解決了。
Mongoid ::錯誤:: AmbiguousRelationship:
問題:曖昧關係:created_languages,:對人定義updated_languages。
摘要:當Mongoid嘗試在內存中設置關係的逆文檔時,它需要知道它屬於哪個關係。當設置:updated_by時,Mongoid查找匹配關係類Language,但找到了可能匹配的倍數::created_languages,:updated_languages。
Resolution:關於語言updated_by關係,您必須添加一個:inverse_of選項來指定與Person相反的:updated_by的確切關係。
部分工作。在將'inverse_of :: created_by,foreign_key:'created_by_id',autosave:true'添加到'Person'類後,我現在可以調用'ruby 2.0.0p451> a.created_languages'。然而,在語言類中添加'inverse_of :: created_languages,foreign_key :: created_by_id,autosave:true'我仍然不能調用ruby 2.0.0p451> b.created_by'。你會知道第二部分有什麼問題嗎? thx – soosap
重新加載編輯後的版本,現在可以運行。 1)我添加了':inverse_of'和2)我在所有地方都添加了'accep_nested_attributes_for'。上面編輯的代碼是可用的。謝謝。 – soosap