Activerecord Rails STI-子类中的自定义关联 类上传

Activerecord Rails STI-子类中的自定义关联 类上传,activerecord,sti,Activerecord,Sti,这应该像预期的那样工作吗?Gallery和MusicAlubm模型会从其父类继承:comments association(上载)并添加自己的吗?是的,模型只是类,当继承时,它们会从父类获得所有方法。因此,由于Gallery和MusicAlbum都是Upload模型的后代,它们将具有has_many:comments关联,并且都将从uploadsdb表中获取数据(需要有type列来支持此模型的STI) 可以找到一个很好的简单STI示例我不担心继承方法,更担心反射之类的事情。我担心Rails会期望

这应该像预期的那样工作吗?Gallery和MusicAlubm模型会从其父类继承:comments association(上载)并添加自己的吗?

是的,模型只是类,当继承时,它们会从父类获得所有方法。因此,由于
Gallery
MusicAlbum
都是
Upload
模型的后代,它们将具有
has_many:comments
关联,并且都将从
uploads
db表中获取数据(需要有
type
列来支持此模型的STI)


可以找到一个很好的简单STI示例

我不担心继承方法,更担心反射之类的事情。我担心Rails会期望所有关联都是在基类上定义的,并且只反映在这个类的关联上。该示例不自定义子类中的关联。你有没有在“真正”的项目中尝试过?关联只是Rails生成的方法列表,它们以某种方式工作。因此,是的,它确实有效,无论关联在哪里声明——在模型本身中还是在它的父对象中。实际上,你甚至可以在一个模块中声明它,并将该模块包含到你感兴趣的类中。我记得,唯一的方法是在“包含”或“扩展”回调中执行,回调在包含类的上下文中声明它们。您知道一种在模块中定义关联方法的方法吗?这样它就可以包含在模块中(而不需要回调?)。我知道的不仅仅是定义的方法。否则Model.reflections会如何工作?不管怎样,我接受你的答案。我问你是否可以,你说可以。我不确信但无法验证您的声明这一事实可能表明了我的问题的一个问题:将关联向下移动到子类中似乎在我的项目中效果很好。在基类中声明所有关联的一个原因是在加载上载时能够急切地加载所有关联。换句话说,我可以上传
。所有内容包括:[:评论,:图像,:音频曲目]
class Upload < ActiveRecord::Base
    has_many :comments
end

class Gallery < Upload
    has_many :images
end

class MusicAlbum < Upload
    has_many :audio_tracks
end