UPDATE:
change_name_name to self.table_name = похоже, убедил рельсы использовать правильную таблицу.Множественное наследование таблиц, столбцы недоступны из подкласса
Я, однако, теперь получаю эти странные ошибки
Mysql2::Error: Unknown column 'templates.deleted_at' in 'where clause': SELECT `objekts`.* FROM `objekts` WHERE (`templates`.`deleted_at` IS NULL)
ORIGINAL ВОПРОС:
У меня есть шаблон, и Objekt:
class Template < ActiveRecord::Base
def status; 0; end # Template doesn't have a status column, so define default
end
class Objekt < Template
table_name = "objekts" # there is a status column in this table
end
, но когда я делаю, Objekt.new.attributes
в консоли он перечисляет только атрибуты из объекта Template
и не перечисляет ни одного из Objekt
.
Каждый столбец на Template
также доступна в Objekt
, но Objekt
имеет дополнительные 10 столбцов (в основном флаги)
, что происходит здесь? почему рельсы не подключают класс Objekt
к таблице objekts
?
Будет ли 'has_many/belongs_to' отношения не лучше здесь вместо того, чтобы использовать метод шаблона Pattern ? Шаблон в этом случае скорее является «базовым». 'Objekt' должен относиться к таблице. Контракт над конфигурацией. – CharlesJHardy
Ну, у шаблона есть масса методов, которые Objekt также должен иметь. вот почему я считаю, что Наследие - лучший случай. Mayble Table-Inheritance - не правильный термин. Я хочу, чтобы оба объекта имели полностью отдельные таблицы. Просто случается так, что в таблицах используются имена столбцов. В основном, я хочу поделиться методами между ними. Модуль не будет работать, потому что тогда он переопределяет определения столбцов Objekt (или будет). – NullVoxPopuli
Я предпочитаю следовать шаблону 'состав над наследованием'. Не могли бы вы переместить методы из шаблона в модуль и включить/расширить их в Objekt, если необходимо? Затем они могут наследоваться от «ActiveRecord :: Base» – CharlesJHardy