3

我在我的 Rails 应用程序中使用了相当多的优秀 Inherited Resources gem,但每当我想使用演示器时,我都会退回到手动编写控制器。

将继承资源与 Draper 或 delegate_presenter 之类的东西结合起来,是否有一个好的、干净的解决方案?

4

1 回答 1

1

这里的作者delegate_presenter

delegate_presenter应该可以正常工作inherited_resources。现在我实际上并没有在项目中使用inherited_resources,所以其中很多只是来自自述文件。

无论如何,我总是在视图中创建演示者对象:todo_present = Present(@todo)例如。

如果您有来自公共来源的模板(例如LegalTodo的子类Todo,出于某种未知的原因),并且您共享模板,则可以在模板中执行此操作:

presenter = Present(resource)

resource- 至少根据inherited_resources 自述文件 - 是您正在查看的当前资源的助手(所以@todo,或@legal_todo

Present()将查看对象的类并实例化适当的演示者对象。TodoPresenterifresource返回一个Todo对象,LegalTodoPresenter如果resource返回一个LegalTodo对象。

然后,假设这些演示者是多态的,演示者会让您抽象出差异(“a 的名称LegalTodo是描述 + 沉积编号,但Todo项目的名称应该只是描述”) - 即使您共享视图!

于 2011-10-26T16:55:19.183 回答