1

複数のメッセージをコントローラ内のフラッシュ ハッシュに渡して、それらを箇条書きリストなどでうまくまとめて表示できるようにしたいと考えています。これを行うために私が考案した方法は、Application Controller でヘルパー関数を作成することです。これは、配列を箇条書きリストにフォーマットし、私の場合は flash[:success] に渡します。これは明らかに Rails のやり方ではありません。なぜなら、箇条書きリストがエンコードされるからです。つまり、取得する代わりに:

  • メッセージ 1
  • メッセージ 2

私は得る:

<ul><li>メッセージ 1</li><li>メッセージ 2</li></ul>

出力を raw() する方法を見つけられると確信していますが、このようなものを機能させる簡単な方法はありませんか? おそらく、flash[] に渡すオプションがありますか? 他の何か?

4

3 に答える 3

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(レール 3 ではデフォルトで行われます)。これは、同様の方法で使用する方法を示す質問ですhtml_safe

于 2011-03-12T23:25:04.527 に答える
0

Rails3 を使用している場合は、raw メソッドを試してください。

raw(my_html_string)

そして、それはhtmlをエスケープしません。ああ、すみません、あなたの最後の文を読みました。この情報「Rails 3 フラッシュ メッセージの問題」を確認してください。探しているものがあるようです。

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

于 2011-02-01T17:32:31.593 に答える
0

デフォルトではスキャフォールディングが表示されないため、通常、この状況ではビューとレイアウトに関する詳細情報を求めflash[:success]ます。

flash[:whatever]これを解決する方法は、毎回配列を作成し、通知だけでなくその配列をレイアウトで処理することにより、通常はフラッシュメッセージを完全にやり直すことです。flash は単なるハッシュであり、値を設定しているだけであることを忘れないでください。

ただし、現在のセットアップ (HTML を 内に配置するヘルパーflash[:success]) でこれを行うだけの場合は、レイアウト ファイルでのフラッシュ メッセージの表示方法を変更できます。デフォルトでは use<%= flash[:success] %>で、自動的に HTML をエスケープします。フラッシュメッセージに対してそれを行わないようにするには、次のように変更します<%=raw flash[:success] %>

于 2011-02-01T17:42:24.380 に答える