Наследование модели рельсов - PullRequest
1 голос
/ 16 февраля 2011

Это будет проще всего объяснить на примере кода, в 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?Или, может быть, есть другой, лучший способ сделать это?Я знаю скрепку, но мне не нравится использовать общую таблицу для хранения данных фотографий и моделей.

Ответы [ 2 ]

2 голосов
/ 16 февраля 2011
0 голосов
/ 16 февраля 2011

Поскольку вы не определяете поля базы данных в модели, вы не можете наследовать схему базы данных таким способом - все ваши поля должны быть указаны для каждой таблицы в миграции. Вы, вероятно, должны использовать paperclip хотя бы потому, что заново изобретать колесо - это боль. Он работает очень хорошо и абстрагируется от фактической структуры базы данных для вас.

В Rails, а не наследование моделей, общие функциональные возможности обычно реализуются в модулях, например так: http://handyrailstips.com/tips/14-drying-up-your-ruby-code-with-modules

...