【问题标题】:Rails flash hash violation of MVC?Rails flash hash违反MVC?
【发布时间】:2011-01-02 18:05:00
【问题描述】:

我知道 Rails 的闪存哈希并不是什么新鲜事,但我一直遇到同样的问题。

控制器应该用于业务逻辑和数据库查询,而不是格式化字符串以显示给用户。但是闪存哈希总是在控制器中设置。这意味着我需要破解和解决 Rails 以使用我制作的帮助器来格式化闪存哈希的字符串。

这只是对 MVC 的务实妥协还是我在这里遗漏了什么?

你如何处理这个问题?或者你甚至不认为它是一体的?

【问题讨论】:

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


    【解决方案1】:

    似乎可以从控制器“强制”访问助手。在此处查看此讨论:

    http://lojic.com/blog/2007/07/27/using-helpers-inside-controllers-in-ruby-on-rails/

    您还可以将部分“渲染”到实例变量。请参阅此页面:

    http://snippets.dzone.com/posts/show/396

    通常,如果您在控制器中调用“render_partial”,则只会渲染部分内容。

    有时,将实例变量的部分呈现为字符串很有用,这样视图仍然可以呈现为 正常,字符串可以传入视图。

    add_variables_to_assigns

    @content_for_navbar = @template.render_partial 'layouts/public_navbar'`

    【讨论】:

      【解决方案2】:

      Rails 不一定是严格 MVC。在 Rails 世界中,控制器更像是在 MVC 模式中称为 View-Controllers 的东西。

      另外,我认为在“纯”MVC 中,控制器应该执行数据库查询和业务逻辑——它们应该封装在模型层中。控制器用于在视图和模型之间移动数据。

      如何为视图创建帮助方法来格式化您粘贴到闪存哈希中的任何内容? flash 不仅需要包含字符串值;它可以包含任意对象。我经常发现自己将一系列模型验证错误放入flash[:error],并编写一个辅助方法将这些消息格式化为<ul>

      【讨论】:

        【解决方案3】:

        如果您真的愿意,您可以在 flash 变量中存储一个键,然后在视图中将该键转换为实际消息。闪光灯的显示方式绝不是内置的。这完全取决于您愿意投入多少工作才能获得纯 MVC。

        【讨论】:

          【解决方案4】:

          shedd 描述的方法对我不起作用。 http://snippets.dzone.com/posts/show/396 中描述的第二种方法确实有效:

          @content_for_navbar = render_to_string :partial => "layouts/public_navbar"
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-08-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-01-01
            相关资源
            最近更新 更多