为站点上的所有页面设置 content_for

Set content_for for all pages on the site

我的 application.html.erb

中有一个 yield
<%= yield(:alert_area) %>

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

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

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

最好的方法是使用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

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

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