在Rails中以方便的方式使用MVC

时间:2011-02-05 23:54:45

标签: ruby-on-rails model-view-controller crud

我有一个文章控制器,它在此刻的一个更新操作中管理所有文章关系,如作者,翻译,相关文章等。

页面包含一堆“列表”,其中包含搜索和排序功能,CRD操作,用于创建新表单和管理现有关联记录的表单。

所有这些东西都由ArticleController编辑和更新操作以及每个列表的一些部分模板管理。

我希望通过添加其他搜索表来查找关联记录来扩展功能。之后我会添加一些其他功能。

我觉得这种方式(一个编辑页面中的所有关联管理)远非方便。所以,也许更好的是为每个列表创建一些特殊的控制器,如:

/articles/1/edit/authors

这个控制器的名称应该是什么?它应该是ArticleController或PeopleController或ApplicationController的子代吗?

或者可能一切都好,我是偏执狂?)

UPD

所有MVC条件都得到了满足。问题是:

管理一个控制器中的所有关系是否合适?不仅添加/删除关系,有时还会创建一个newone,例如@ article.authors.find_or_create_by_name(name)。视图中的关系不仅仅是选择标签!它们是完全具有自己的搜索,排序和分页功能的表格。

如果有人不理解我,请以不同的方式提问:

如何创建“子控制器”:如果我们有ArticleController及其编辑操作。 ArticleController只应管理Article模型中的字段。一群子控制器应该管理关系。

为什么我需要它? 让我们为这样的页面添加一个AJAX:没有遇到严重的问题,但是在每个AJAX调用时,ArticleController.update / edit动作一个查询,并且可能会做一些无关紧要的工作,比如构建模型的Arel关系,永远不会被使用。我喜欢将工作划分为小的独立部分,而不是构建一个可以做任何事情的巨大控制器。

2 个答案:

答案 0 :(得分:2)

你的文章controller不应该管理关系。那应该在你的model中。查看活动记录callbacks。您可以在回调中执行与管理作者,翻译等相关的所有操作。例如,在after_update callback

您还想使用nested resources。例如,您的authors嵌套在articles

答案 1 :(得分:1)

例如,也许你可以拥有一个管理作者的作者控制器< - >文章关系。 不要忘记您可以使用“连接”模型来处理所涉及的两个模型之间的关系。 你可以有像

这样的路线
edit_article_authorships GET /articles/:article_id/authorships/edit(.:format) {:controller=>"authorships", :action=>"edit"}