2011-02-01 65 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] %>