【发布时间】:2011-02-05 23:54:44
【问题描述】:
我有一个文章控制器,它现在在一个更新操作中管理所有文章关系,如作者、翻译、相关文章等。
页面包含一堆“列表”,具有搜索和排序功能、CRD 操作、用于创建新关联记录和管理现有关联记录的表单。
所有这些东西都由 ArticleController 编辑和更新操作以及每个列表的部分模板进行管理。
我想通过添加额外的搜索表来查找关联记录来进一步扩展功能。稍后我会添加一些其他功能。
我觉得这种方式(一个编辑页面中的所有关联管理)远非方便。所以,也许,更好的是为每个列表创建一些特殊的控制器,例如:
/articles/1/edit/authors
这个控制器的名字应该是什么?它应该是 ArticleController 或 PeopleController 或 ApplicationController 的子级吗?
或者也许一切都好,我是偏执狂?)
UPD
严格满足所有 MVC 条件。问题是:
在一个控制器中管理所有关系是否很好。不仅添加/删除关系,有时还会创建一个新关系,例如 @article.authors.find_or_create_by_name(name)。视图中的关系不仅仅是选择标签!它们是功能齐全的表格,具有自己的搜索、排序、分页功能。
如果有人不理解我,我们换个方式问:
如何创建“子控制器”:如果我们有 ArticleController 及其编辑操作。 ArticleController 应该只管理 Article 模型中的字段。还有一堆子控制器应该管理关系。
为什么我需要它? 让我们在这样的页面上添加一个 AJAX:没有遇到严重的问题,但是在每次 AJAX 调用 ArticleController.update/edit 操作时,一个查询可能会做一些不必要的工作,比如为模型建立 Arel 关系,这些工作永远不会被使用。我喜欢将工作分成独立的小块,而不是构建一个可以做任何事情的巨大 Controller。
【问题讨论】:
标签: ruby-on-rails model-view-controller crud