我很爲難嘗試建模的自我指涉的,多到多,對稱實體使用的DataMapper:自我指涉的對稱多到許多
我想跟蹤各種軟件版本的兼容性我要追蹤:
class SoftwareRelease
include DataMapper::Resource
property :id, Serial
property :software_release_type_id, Integer
property :version, String
belongs_to :software_release_type
has n, :compatibilities, child_key: [ :source_id ]
has n, :compatible_releases, self, through: :compatibilities, via: :target
end
class SoftwareReleaseType
include DataMapper::Resource
property :id, Serial
property :name, String
property :short_name, String
has n, :software_releases
end
class Compatibility
include DataMapper::Resource
belongs_to :source, 'SoftwareRelease', key: true
belongs_to :target, 'SoftwareRelease', key: true
end
一個給定的軟件版本「ABC」可以有一個類型的硬件洗車臺富'的,而給定的軟件版本「高清」可以有一個類型的硬件平臺吧'的。
要在上面的代碼建立兼容的軟件版本之間,我必須執行2增加了
release_a_b_c.compatible_releases << release_d_e_f
release_d_e_f.compatible_releases << release_a_b_c
這有點兒難看。
我希望能夠做一個添加並建立對稱關係。我明顯可以用SoftwareRelease
中的一個實例方法包裝2推,但感覺就像我在地毯下掃視醜陋。任何想法爲優雅的解決方案?
非常感激,
帕維爾
PS
很久以前,主動記錄有acts_as_network插件,它沒有類似的東西。無法在DM世界找到任何東西。