1
我不是在數據庫和關係邏輯的專家,我有點困惑什麼,我有以下的情況下做的。紅寶石DataMapper的 - 對稱的自我指涉的許多一對多的關係
我有一個模型Expression
,我想實現一個TranslationPair
自參考多對多的關係。
class Expression
include DataMapper::Resource
has n, :translation_pairs, child_key: [:exp_1_id]
end
class TranslationPair
include DataMapper::Resource
belongs_to :exp_1, 'Expression', key: true
belongs_to :exp_2, 'Expression', key: true
end
的問題是,我想translation_pairs
關係與在exp_1
領域一個表達式返回不但TranslationPair
情況下,也TranslationPair
情況下與在exp_2
場定表達式(如果expression1
是一個翻譯expression2
,然後expression2
是expression1
翻譯)。 child_key
選項中的一種析取。例如:
has n, :translation_pairs, child_key: [:exp_1_id] or [:exp_2_id]
我可以直接在模型聲明中實現它,還是我必須實現一些自定義方法?
感謝@mltsy。兩種選擇都很有趣。第一個哲學(:))是不錯,但我不覺得舒服改變了我的模型設計(即使它不會太困難)只是一種DataMapper的限制(我不知道,但我認爲我想要在純SQL模式中執行)。我會嘗試第二個,因爲未來的改變會更容易。 –
沒有與另外的'these_translations'和'those_translations'問題。它們是'DataMapper :: Associations :: OneToMany :: Collection',它不是從'Array'繼承的,所以'+'不像預期的連接那樣工作(該方法存在,它使對象變得奇怪涉及的屬性我無法解釋)。解決方案是將它們轉換爲'to_a'。當然你放棄了'收藏'的能力,但是我知道我可以在沒有他們的情況下生活...... –