Rails 模型继承
用代码示例来解释会更简单。在Python中,我可以这样做来实现模型继承:
"""Image model"""
from sqlalchemy import Column, ForeignKey
from sqlalchemy.types import Integer, String, Text
from miasto_3d.model.meta import Base
class Image(Base):
__tablename__ = "image"
image_id = Column(Integer, primary_key=True)
path = Column(String(200))
def get_mime(self):
#function to get mime type from file
pass
"""WorkImage model"""
class WorkImage(Image, Base):
__tablename__ = "work_images"
image_id = Column(Integer, ForeignKey("image.image_id"), primary_key=True)
work_id = Column(Integer, ForeignKey("work.id"))
work = relation("Work", backref=backref('images',order_by='WorkImage.work_id'))
"""UserAvatar model"""
class UserAvatar(Image, Base):
__tablename__ = "user_avatars"
image_id = Column(Integer, ForeignKey("image.image_id"), primary_key=True)
user_id = Column(Integer, ForeignKey("user.id"))
user = relation("User", backref=backref('images',order_by='UserAvatar.user_id'))
那我在Rails中怎么做类似的事情呢?或者有没有其他更好的方法?我知道有paperclip这个工具,但我不喜欢它用共享表来存储照片和模型数据的方式。
2 个回答
0
因为你没有在模型中定义数据库字段,所以不能通过这种方式继承数据库结构——你需要在每个表的迁移中单独指定所有字段。你可能应该使用 paperclip
,因为重新发明轮子真的很麻烦。它工作得很好,并且为你简化了实际的数据库结构。
在Rails中,与其说是模型继承,不如说共享功能通常是通过模块来实现的,像这样:
http://handyrailstips.com/tips/14-drying-up-your-ruby-code-with-modules