【问题标题】:Usage of MVC in convenient way in Rails在 Rails 中以方便的方式使用 MVC
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

    • 当然关系添加/删除在模型中。在控制器中,我只需执行 @related_articles = @article.related_articles 或 @article.related_articles
    • 嵌套资源真的很有帮助
    【解决方案2】:

    例如,也许您可​​以拥有一个 Authorship 控制器来管理作者 文章关系。 不要忘记您可以使用“join”模型来处理所涉及的 2 个模型之间的关系。 你可以有这样的路线

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

    【讨论】:

    • thx,我认为Authorship可以根据输入参数(article_id,post_id等)处理作者 some_model关系,我试试看。
    猜你喜欢
    • 2015-02-21
    • 1970-01-01
    • 2011-09-08
    • 2013-04-24
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    相关资源
    最近更新 更多