2014-03-25 97 views
0

我試圖建模有以下限制圖像模型和頁面模型之間的關係:HAS_ONE:通過和的has_many:通過在同一個關聯

1 - 一個頁面能夠具有最大的一個圖像的(0圖像也是可以接受的)

2 - 圖像可以出現在許多頁面中。

這樣的關係,可以推測如下:

class Image < ActiveRecord :: Base 
    has_many :pages, :through :imageables 
end 

class Page < ActiveRecord :: Base 
    has_one :image, :through :imageables 
end 

class Imageable < ActiveRecord :: Base 
    belongs_to :image 
    belongs_to :page 
end 

一般此關聯或者與這兩個類圖像和頁面用的has_many存在:通過或兩者具有HAS_ONE:通過 是否有可能HAS_ONE之間混合:通過和has_many:通過在這種情況下? ActiveRecord的沒有提到這種特殊情況下

PS:我選擇使用的連接模型的方式,因爲我有可能具有相同的圖像以外的模型以及用不同的限制(的has_many而不是HAS_ONE)

謝謝您幫幫我!

+1

您真的不應該爲此使用連接模型,無論它是否在其他地方使用。你的頁面應該有一個'image_id'和'belongs_to:image'。您可以在其他地方擁有多對多的關係,而無需在頁面類上強加聯接模型。 – meagar

+0

那麼重點在於有很多模型與Page(Article,Memo,Comment ...)有相同的需求。所以我認爲這是一種更清晰的指定關係的方式,而不是爲所有模型運​​行遷移......這些是我個人的想法,但我在這裏要求從您的經驗中學習... – user3442206

+2

@ user3442206 - 使用多態這些關係:http://guides.rubyonrails.org/association_basics.html#polymorphic-associations – BroiSatse

回答

0

上面的代碼不起作用...我找到了一箇中位數解決方案來實現我需要的模式。

最終的代碼如下所示:

class Image < ActiveRecord :: Base 
    has_many :pages, :through :imageables 
end 

class Page < ActiveRecord :: Base 
    has_many :image, :through :imageables 
    accepts_nested_attributes :images, allow_destroy => true 
end 

class Imageable < ActiveRecord :: Base 
    belongs_to :image 
    belongs_to :page 
    validates_uniqueness_of :page_id 
end 

當我使用rails_admin編輯我的模型,我得到公正的東西,當涉及到添加一個新的形象,在可成像驗證確保ditor不亂與周圍的規格......

這是有點怪異作爲一個解決方案,但相信我,它非常適合於我正在深化發展應用的背景下...

我張貼這麼如果有人有類似的關注。