2011-02-01 57 views
1

我希望能够将多个消息传递到我的控制器内部的闪存哈希,并让它们很好地一起显示,例如在项目符号列表中。我设计的方法是在我的应用程序控制器中创建一个辅助函数,它将数组格式化为一个项目符号列表,然后传给我,在我的例子中,flash [:success]。这显然不是Rails方式,因为我的项目符号列表被编码。也就是说,不但得不到:Rails 3/Controller/Flash hash

  • 消息1
  • 消息2

我得到:

<UL> <李>消息1 < /李> <李>消息2 </li > </ul >

我敢肯定,我可以找出一种方法来raw()输出,但没有一种简单的方法来得到像这样的工作?也许有一个选项传递给flash []?还有别的吗?

回答

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列表

# 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

0

如果您使用Rails3,请尝试原始方法。

raw(my_html_string) 

而且它不会转义html。哦,对不起,我刚刚读了你最后一句话。看看这个信息,“Rails 3点的闪信的问题”,它看起来像它可能是你正在寻找的东西:

http://www.ruby-forum.com/topic/215108

0

通常我会问有关你在这种形势的看法和布局的更多信息,因为默认情况下脚手架不显示flash[:success]

我解决这个问题的方式通常是完全重做我的flash消息,每次都使用flash[:whatever]这个数组,并且在我的布局中处理该数组,而不仅仅是通知。请记住,闪存只是一个哈希,你只是设置值。

但是,如果您只是想使用您现在的设置(帮助将HTML放入flash[:success])进行此操作,您可以更改布局文件中显示的Flash消息的显示方式。默认情况下,它们只是使用<%= flash[:success] %>,它会自动转义HTML。为了使它不这样做的闪光消息,将其更改为<%=raw flash[:success] %>