反向关联为belongs_to - has_one

问题描述:

关于活动记录一直困扰着我(我还是有点新的轨道)。我在做迁移,像这样:反向关联为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 

不,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