Классы (по крайней мере, модели) ничего не знают или не должны знать о том, как они отображаются. Это фундаментально для разделения проблем, обеспечиваемых шаблоном MVC.
Думаю, я бы попробовал что-то вроде этого:
Используйте один контроллер для всех моделей STI, ShipmentsController
или что-то подобное. Помимо того, что это кажется логичным, все ваши взгляды окажутся в одном месте, что должно помочь.
Что касается представлений, как насчет "основного" для общих частей и одного частичного для каждого набора специфичных для подклассов полей? Используйте case
по вашему мнению, или, возможно, более аккуратно, вспомогательный метод, что-то вроде
def partial_name_for_subclass(obj)
if obj.is_a?(CrudeOilShipment) # or kind_of? or test the type column or use respond_to?
'crude_oil_shipment'
# etc
end
end
DRYer, рассмотрите возможность использования соглашения (Rails любит соглашения):
<%= render :partial => @shipment.class.name.downcase, :locals => { :item => @shipment } %>
где у вас есть частичное для каждого подкласса.
Надеюсь, что это поможет / имеет смысл ...