我希望能够将多个消息传递到我的控制器内部的闪存哈希,并让它们很好地显示在一起,例如,在项目符号列表中。我设计的方法是在我的Application Controller中创建一个辅助函数,它将一个数组格式化为一个项目符号列表,然后我将其传递给flash [:success]。这显然不是Rails方式,因为,即使我的项目符号列表被编码。也就是说,而不是得到:
我明白了:
< ul>< li>消息1< / li>< li>消息2< / li>< / ul>
我确信我可以找到一种方法来生成()输出,但是有没有一种简单的方法来获得这样的工作?也许有传递给flash []的选项?还有别的吗?
答案 0 :(得分:3)
我使用render_to_string
和部分而不是助手来实现类似的东西。
# app/controller/dogs_controller.rb
def create
@dog = Dog.new(params[:dog])
@messages=[]
if @dog.save
@messages << "one"
@messages << "two"
flash[:notice] = render_to_string( :partial => "bulleted_flash")
redirect_to(dogs_path)
else
render :action => 'new
end
end
然后我在HTML列表中格式化flash消息数组
# app/views/dogs/_bulleted_flash.html.erb
<ol>
<% @messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ol>
生成以下HTML
# http://0.0.0.0:3000/dogs
<body>
<div id="flash_notice">
<ul>
<li>one</li>
<li>two</li>
</ul>
</div>
...
</body>
如果您需要继续使用帮助程序,那么我认为您需要将html_safe
方法附加到字符串以防止对其进行编码(默认情况下,rails 3会执行此操作)。这是question showing how to use html_safe
in a similar fashion
答案 1 :(得分:0)
如果您使用的是Rails3,请尝试使用raw方法。
raw(my_html_string)
它不会逃避HTML。哦,对不起,我刚看完你的最后一句话。看看这个信息,“Rails 3 flash message problems”,它看起来可能就是你想要的:
答案 2 :(得分:0)
通常我会在这种情况下询问有关您的视图和布局的更多信息,因为脚手架默认情况下不会显示flash[:success]
。
我解决这个问题的方法是通常通过每次都使flash[:whatever]
数组,并在我的布局中处理该数组而不仅仅是通知来完全重做我的flash消息。请记住,flash只是一个哈希,你只是设置值。
但是,如果您只想使用现在的设置(帮助将HTML放在flash[:success]
内),则可以更改Flash消息在布局文件中的显示方式。默认情况下,它们只是使用<%= flash[:success] %>
,它会自动转义HTML。要使其不对Flash消息执行此操作,请将其更改为<%=raw flash[:success] %>