当前位置:  开发笔记 > 前端 > 正文

Rails:一次添加多个flash [:notice]的简便方法

如何解决《Rails:一次添加多个flash[:notice]的简便方法》经验,为你挑选了2个好方法。

我认为每次你做flash[:notice]="Message"它会将它添加到数组中,然后在视图中显示,但以下只保留最后一个闪存:

flash[:notice] = "Message 1"
flash[:notice] = "Message 2"

现在我意识到它只是一个带键的简单哈希(我认为:))但是有更好的方法来执行多次闪烁而不是以下:

flash[:notice] = "Message 1
" flash[:notice] << "Message 2"

Victor Savki.. 55

我通常会将这些方法添加到我的ApplicationHelper中:

def flash_message(type, text)
    flash[type] ||= []
    flash[type] << text
end

def render_flash
  rendered = []
  flash.each do |type, messages|
    messages.each do |m|
      rendered << render(:partial => 'partials/flash', :locals => {:type => type, :message => m}) unless m.blank?
    end
  end
  rendered.join('
') end

之后很容易使用它们:

你可以这样写:

flash_message :notice, 'text1'
flash_message :notice, 'text2'
flash_message :error, 'text3'

在你的控制器中.

只需将此行添加到您的布局:

<%= render_flash %>

一个很好的答案.但是,存在两个问题:`flash.now`方法以及在`redirect_to`调用中将flash消息作为额外参数的可能性.第一个可以通过给`flash_message`方法提供第三个(可能是可选的)布尔参数来处理; 如果给出`true`作为其值,则该方法应该使用`flash.now`数组而不是`flash`.(对空数组的一次初始化就足够了.)第二个问题只需要在调用`redirect_to`之前在单独的行上设置flash消息而不是使用extra参数. (3认同)


mipadi.. 44

flash消息可以真的是你想要的任何东西,所以你可以做这样的事情:

flash[:notice] = ["Message 1"]
flash[:notice] << "Message 2"

然后在您的视图中,将其输出为

<%= flash[:notice].join("
") %>

或者你喜欢什么.

这种技术是否比其他解决方案更容易,取决于您自己的偏好.



1> Victor Savki..:

我通常会将这些方法添加到我的ApplicationHelper中:

def flash_message(type, text)
    flash[type] ||= []
    flash[type] << text
end

def render_flash
  rendered = []
  flash.each do |type, messages|
    messages.each do |m|
      rendered << render(:partial => 'partials/flash', :locals => {:type => type, :message => m}) unless m.blank?
    end
  end
  rendered.join('
') end

之后很容易使用它们:

你可以这样写:

flash_message :notice, 'text1'
flash_message :notice, 'text2'
flash_message :error, 'text3'

在你的控制器中.

只需将此行添加到您的布局:

<%= render_flash %>


一个很好的答案.但是,存在两个问题:`flash.now`方法以及在`redirect_to`调用中将flash消息作为额外参数的可能性.第一个可以通过给`flash_message`方法提供第三个(可能是可选的)布尔参数来处理; 如果给出`true`作为其值,则该方法应该使用`flash.now`数组而不是`flash`.(对空数组的一次初始化就足够了.)第二个问题只需要在调用`redirect_to`之前在单独的行上设置flash消息而不是使用extra参数.

2> mipadi..:

flash消息可以真的是你想要的任何东西,所以你可以做这样的事情:

flash[:notice] = ["Message 1"]
flash[:notice] << "Message 2"

然后在您的视图中,将其输出为

<%= flash[:notice].join("
") %>

或者你喜欢什么.

这种技术是否比其他解决方案更容易,取决于您自己的偏好.


在Rails 3中,除非标记为安全,否则```将被转义.试试[safe_join](http://apidock.com/rails/ActionView/Helpers/OutputSafetyHelper/safe_join):`<%= safe_join(flash [:notice],"
".html_safe)%>`.另请注意,单个闪存项通常只是字符串.mipadi在实例化周围使用[方括号]来创建一个数组.如果没有这些括号,`<<`只会在字符串中附加更多文本.
推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有