我在我的 Rails 应用程序中使用了相当多的优秀 Inherited Resources gem,但每当我想使用演示器时,我都会退回到手动编写控制器。
将继承资源与 Draper 或 delegate_presenter 之类的东西结合起来,是否有一个好的、干净的解决方案?
我在我的 Rails 应用程序中使用了相当多的优秀 Inherited Resources gem,但每当我想使用演示器时,我都会退回到手动编写控制器。
将继承资源与 Draper 或 delegate_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
ifresource
返回一个Todo
对象,LegalTodoPresenter
如果resource
返回一个LegalTodo
对象。
然后,假设这些演示者是多态的,演示者会让您抽象出差异(“a 的名称LegalTodo
是描述 + 沉积编号,但Todo
项目的名称应该只是描述”) - 即使您共享视图!