【发布时间】:2013-01-23 17:56:18
【问题描述】:
我有一个关于控制器操作之间代码重用的问题。我认为这是一个相当标准的情况,所以我对 Rails 的最佳实践很感兴趣。
假设我有一个films 资源和一个对应的FilmsController,它有一个由CommentsController 服务的嵌套资源comments。嵌套资源可以使用其index 和show 操作自行呈现。但是,也应该可以渲染嵌入在相应电影页面中的 cmets。
现在,问题是,在FilmsController.show 中重用来自CommentsController 的代码的最佳方法是什么?
1) 强制CommentsController.index 呈现为字符串,然后将其以变量的形式传递给电影视图?
或者2)直接在电影视图中调用CommentsController.index作为一种“部分”,从那里执行数据库查询?
或者 3) 在CommentsController 中创建一个单独的方法来负责数据库处理,从CommentsController.index 和FilmsController.show 中调用它,并在这两个地方也使用相应的视图?
对我来说,选项 1) 和 2) 看起来有点混乱,而 3) 不是模块化的并且涉及一些代码重复。有没有更好的方法来做到这一点?
非常感谢!
【问题讨论】:
-
在 ruby on rails 中查找演示者模式
-
@TonyHopkinson - 感谢您的想法,当传递的数据更复杂时,Presenter 模式在某些情况下确实可能会有所帮助。总而言之,看起来我会选择我的选项 3),同时尽可能封装。
-
简单数据有一个不好的习惯,就是变得不简单,速度很快,但是欢迎您。
-
create a separate method in CommentsController responsible for the database handling数据库操作应该在模型而不是控制器中。数据库重用的另一件事是服务对象。
标签: ruby-on-rails view controller reusability