开发者

Rails model inheritance

It will be simplest to explain with code example, in Python I can do so to achieve model inheritance:

"""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.开发者_如何学Cimage_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'))   

How I do similar things in Rails? Or maybe there is another, better way to do it? I know paperclip, but I don't like it's conception to use shared table to store photo and model data.


It looks like you're wanting either a polymorphic association or perhaps single table inheritance.


Since you don't define database fields in the model, you cannot inherit database schema in this way - all your fields will need to be specified per table in a migration. You probably should use paperclip, if only because reinventing the wheel is a pain. It works really well, and abstracts away from the actual database structure for you.

In Rails, rather than model inheritance, shared functionality tends to be implemented in modules, like so: http://handyrailstips.com/tips/14-drying-up-your-ruby-code-with-modules

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜