2013-04-23 205 views
1

關於活動記錄一直困擾着我(我還是有點新的軌道)。我在做遷移,像這樣:反向關聯爲belongs_to - has_one

def up 
    change_table :slide do |t| 
     t.references => :slideable, :polymorphic => true 
    end 
end 

,然後我會因此修改我的模型:

class Slide < BaseModel 
    ... 
    belongs_to :slideable, :polymorphic=>true 
end 

class Painting < BaseModel 
    ... 
    has_one :slide, :as => :slideable 
end 

class Paper < BaseModel 
    ... 
    has_one :slide, :as => :slideable 
end 

難道我還必須爲在繪畫和紙的HAS_ONE關係進行遷移爲了能夠使用協會的雙方?

slide.painting.name 
slide.paper.title 
painting.slide.name 
paper.slide.name 

回答

1

不,has_one不會影響你的數據庫。 belongs_to是實際上在您的表中創建外鍵字段的內容,這就是您需要遷移的原因。

+0

所以我應該能夠使用上述協會的雙方? – tim 2013-04-23 23:22:20

+0

不,具有多態關係,您不能引用'slide.painting'或'slide.paper'。你必須使用'slide.slideable',它將返回一個繪畫或紙張對象。然而'painting.slide'和'paper.slide'應該可以工作。你的Slide模型中還有一個拼寫錯誤,':polymorphic = true'應該是':polymorphic => true'。 – 2013-04-23 23:25:10

+0

謝謝。還修正了錯字 – tim 2013-04-23 23:28:35