1

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

  • 消息 1
  • 消息 2

我得到:

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

我确信我可以找到一种方法来 raw() 输出,但是没有一种简单的方法可以让这样的东西工作吗?也许有一个选项可以传递给 flash[]?还有什么?

4

3 回答 3

3

我使用render_to_stringand a partial 而不是 helper 来实现类似的目标。

# 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 会这样做)。这是一个显示如何以html_safe类似方式使用的问题

于 2011-03-12T23:25:04.527 回答
0

如果您使用的是 Rails3,请尝试使用 raw 方法。

raw(my_html_string)

它不会逃避html。哦,对不起,我刚看了你的最后一句话。查看此信息,“Rails 3 flash message questions”,看起来它可能是您正在寻找的:

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

于 2011-02-01T17:32:31.593 回答
0

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

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

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

于 2011-02-01T17:42:24.380 回答