我的yield
中有application.html.erb
,
<%= yield(:alert_area) %>
...我想为网站上的每个页面(使用布局)设置此区域的内容。内容无法在视图中进行硬编码,因为它必须仅在某些情况下显示(即&#34; 您的个人资料不完整,请点击此处完成!&#34;)
我该怎么做?我可以知道我可以尝试在content_for
中使用ApplicationController
,但这似乎是通过将内容放入控制器来打破MVC模式。另外,无论如何,我还是那样做了死路一条。
在网站的每个页面上粘贴动态内容的Rails MVC方法是什么?
答案 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