【发布时间】:2011-12-13 19:14:58
【问题描述】:
我在我的 Rails 应用程序中大量使用了出色的 Inherited Resources gem,但每当我想使用演示器时,我都会退回到手动编写控制器。
有没有一个好的、干净的解决方案可以将继承的资源与 Draper 或 delegate_presenter 之类的东西结合起来?
【问题讨论】:
标签: ruby-on-rails inherited-resources presenter
我在我的 Rails 应用程序中大量使用了出色的 Inherited Resources gem,但每当我想使用演示器时,我都会退回到手动编写控制器。
有没有一个好的、干净的解决方案可以将继承的资源与 Draper 或 delegate_presenter 之类的东西结合起来?
【问题讨论】:
标签: ruby-on-rails inherited-resources presenter
delegate_presenter 的作者在这里。
delegate_presenter 应该可以与inherited_resources 一起正常工作。现在我还没有在项目中实际使用过inherited_resources,所以很多内容只是来自自述文件。
无论如何,我总是在视图中创建演示者对象:例如todo_present = Present(@todo)。
如果您有来自公共来源的模板(例如 LegalTodo 是 Todo 的子类,出于某种未知原因),并且您共享模板,您可以在模板中执行此操作:
presenter = Present(resource)
resource - 至少根据inherited_resources 自述文件 - 是您正在查看的当前资源的助手(因此,@todo 或 @legal_todo)
Present() 将查看对象的类并实例化适当的演示者对象。 TodoPresenter 如果resource 返回一个Todo 对象,LegalTodoPresenter 如果resource 返回一个LegalTodo 对象。
然后,假设这些演示者是多态的,演示者会让你抽象出差异(“LegalTodo 的名称是描述 + 沉积编号,但 Todo 项目的名称应该只是描述” ) - 即使您分享观点!
【讨论】: