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

时间:2015-04-01 18:06:53

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

我的yield中有application.html.erb

<%= yield(:alert_area) %>

...我想为网站上的每个页面(使用布局)设置此区域的内容。内容无法在视图中进行硬编码,因为它必须仅在某些情况下显示(即&#34; 您的个人资料不完整,请点击此处完成!&#34;)

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

除了bukk530建议的内容,而不是yield / content_for构造使用render / partial构造,并且在partial中只有一个条件因此它只在你想要的时候渲染一些东西。例如

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