【问题标题】:Set content_for for all pages on the site为网站上的所有页面设置 content_for
【发布时间】:2015-04-01 18:06:52
【问题描述】:

我的application.html.erb 中有一个yield

<%= yield(:alert_area) %>

...我想为网站上的每个页面(使用布局)设置该区域的内容。内容不能在视图中硬编码,因为它只能在某些情况下显示(即“您的个人资料不完整,请单击此处完成!”)

我该怎么做?我知道我可以尝试在ApplicationController 中使用content_for,但这似乎通过将内容放入控制器来打破MVC 模式。另外,无论如何,我这样做是走入了死胡同。

在网站的每个页面上粘贴动态内容的正确 Rails MVC 方式是什么?

【问题讨论】:

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


    【解决方案1】:

    正如 bukk530 所建议的那样,使用 render/partial 构造而不是 yield/content_for 构造,并且在部分中只有一个条件,所以它只会在你想要的时候呈现一些东西.例如。

    - flash.each do |name, message|
      %div{ class: "flash flash-#{name}" }= message
    

    【讨论】:

    • 天啊。我以前怎么没看到这个?我想我只是需要休息一下!
    • 是的,老实说,我不知道为什么标准的 Rails 布局模板不只包含类似的东西。
    【解决方案2】:

    最好的方法是使用flash,它存储在会话中,设置后只显示一次。

    例子:

    application.html.erb:

    <span class="error"><%= flash[:error] %></span>
    

    控制器:

    def raise_error
        flash[:error] = "Hi! i'm an error!" # Use i18n here
        redirect_to :somewhere
    end
    

    【讨论】:

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