反向关联为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
是实际上在您的表中创建外键字段的内容,这就是您需要迁移的原因。
所以我应该能够使用上述协会的双方? – tim 2013-04-23 23:22:20
不,具有多态关系,您不能引用'slide.painting'或'slide.paper'。你必须使用'slide.slideable',它将返回一个绘画或纸张对象。然而'painting.slide'和'paper.slide'应该可以工作。你的Slide模型中还有一个拼写错误,':polymorphic = true'应该是':polymorphic => true'。 – 2013-04-23 23:25:10
谢谢。还修正了错字 – tim 2013-04-23 23:28:35