为站点上的所有页面设置 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
我的 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