Один из обходных путей - определить метод, который предоставит вам прямой доступ к унаследованным свойствам:
class Pen < ActiveRecord::Base
def some_property
product_properties.some_property
end
end
# These calls are equivalent
@pen.some_property
@pen.product_properties.some_property
Если у вас много свойств, вы, вероятно, захотите сделать это динамически:*
class Pen < ActiveRecord::Base
[ :property1, :property2, :property3 ].each do |property|
define_method(:property) do
product_properties.some_property
end
end
end
Однако, это звучит как главный кандидат на Наследование одной таблицы .Вы создаете родительскую модель (Product
), от которой наследуются ваши дочерние модели (Pen
, Tee
и т. Д.).У них есть все свойства Product
, а также их собственные специфические свойства.
Просмотрите интерактивное руководство по обучению.