【发布时间】:2014-06-16 19:14:11
【问题描述】:
我将 Draper 用于一般的视图层装饰器。
我想将一些与控制台相关的、人类可读的功能引入新的装饰器中。
我的第一个想法是将它们放在一个模块中,例如 Human::XxxDecorator,使它们与我的普通视图层装饰器隔离:它们仅用于 rails c 调试/黑客/测试工作。
这在顶层运行良好;我可以使用命名空间装饰器显式装饰模型。
现在我需要装饰一系列 STI 车辆。我不确定在 装饰器的同一模块中创建特定于车辆类型的装饰器的最佳方法是什么,例如,我有:
Human::CarDecoratorHuman::TruckDecoratorHuman::MotorcycleDecorator
我不确定如何获取,例如,
pry » dfleet = Human::FleetDecorator.new(Fleet.find(1))
到其嵌入式车辆集合,每个车辆都有来自Human 模块的适当装饰器。使用decorates 的幼稚方法不起作用;我明白了:
Draper::UninferrableDecoratorError: Could not infer a decorator for Vehicle
组合:
- 来自特定模块的装饰器,以及
- 适用于 STI 模型的装饰器
正在扔东西。
在深入研究 Draper 装饰器推理代码之前(我只是假设这是最好的起点),这是一个已经解决的问题并且我遗漏了什么吗?
【问题讨论】:
标签: ruby-on-rails ruby draper