2012-11-20 25 views
2
class Upload < ActiveRecord::Base 
    has_many :comments 
end 

class Gallery < Upload 
    has_many :images 
end 

class MusicAlbum < Upload 
    has_many :audio_tracks 
end 

应该按预期工作吗?将Gallery和MusicAlubm模型继承:来自其父级的评论关联(Upload)并添加自己的?Rails STI - 子类中的自定义关联

+1

声明基类中所有关联的一个原因是能够在加载上载时急切加载所有关联。换句话说,我可以做'''Upload.all include:[:comments,:images,:audio_tracks]''' –

回答

4

是的,模型只是类,并且当继承它们时,它们将获得父类的所有方法。所以,既GalleryMusicAlbumUpload模型的后裔,他们将有has_many :comments协会,都将从uploads分贝表中获取数据(这需要有一个type列支持STI这种模式)

一个不错的可以找到简单的STI示例here

+0

我不担心继承方法,更多的是关于反射的东西。我担心像Rails这样的问题,期望所有关联都在基类上定义,并反映了仅此类的关联。 该示例不会自定义子类中的关联。你有没有试过这个“真正的”项目?它没有问题吗? –

+0

关联只是由Rails生成并以某种方式工作的方法的列表。所以是的,它确实有效,无论这个关联是在哪里声明的 - 在模型本身或它的父项中。实际上,你甚至可以在一个模块中声明它,并将该模块包含到你的类中。 – alony

+0

这对Module很有趣,他们只记得在包含类的上下文中使用“包含”或“扩展”回调函数。你是否知道在模块中定义关联方法的方法,以便它可以包含在模块中(没有回调?)。 有很多定义的方法,我知道的很多。否则,Model.reflections将如何工作? –