我有一个文章控制器,它在此刻的一个更新操作中管理所有文章关系,如作者,翻译,相关文章等。
页面包含一堆“列表”,其中包含搜索和排序功能,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关系,永远不会被使用。我喜欢将工作划分为小的独立部分,而不是构建一个可以做任何事情的巨大控制器。
答案 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"}