Flash [:error]同时添加多个

时间:2014-08-07 14:57:24

标签: ruby-on-rails

我使用' nokogiri'其中包括从一些上传的xml中检查模式。我将打印出所有发生的错误:

    xsd.validate(doc).each do |error|
      flash[:error] = error.message 
    end

如果我这样做,我只会看到最后添加的错误,如果存在多个错误。

我发现也找到了一个类似的问题,关于这个问题rails-easy-way-to-add-more-than-one-flashnotice-at-a-time但是公认的解决方案对我有用。

由于

2 个答案:

答案 0 :(得分:1)

将方法更改为

flash[:error] = xsd.validate(doc).map(&:message).to_sentence

<强>更新

使用br标记分隔每个错误

flash[:error] = xsd.validate(doc).map(&:message).join('<br>').html_safe

答案 1 :(得分:0)

  

我发现也找到了一个关于这个问题的类似问题   rails-easy-way-to-to-more-than-one-flashnotice-at-time,但是   公认的解决方案对我有用。

以什么方式不适合你?

您可以添加自己的flash类型,如flash [:errors],并编写自己的帮助方法以方便使用。

def my_flash(type, message)
  flash[type] ||= []
  flash[type] += Array.wrap(message)
end

然后你可以使用一个数组或一个字符串作为消息,这样可以很容易地传入多个,就像这样。

my_flash :errors, "name cannot be blank"
my_flash :errors, ["age must be greater than 17", "phone number is invalid"]

p flash[:errors]
#=> ["name cannot be blank", "age must be greater than 17", "phone number is invalid"]