5

我已经设置了一个小应用程序,该应用程序需要一个电子邮件地址并保存它,我已经在模型上设置了验证(唯一且有效的电子邮件)并且这些都有效。

我正在使用下面的代码来尝试保存电子邮件,如果它已经存在或者它不是有效的格式,它需要停止并设置错误消息

def create
    interest = KnownInterest.new( :email => params[:email] )
    if(interest.valid? and interest.save)
        flash[:notice] = "Thanks for showing interest, We'll be in touch with updates."
    else
        flash[:notice] = interest.errors.messages
    end     
    redirect_to action: "index"
end

这吐出[“电子邮件无效”],我如何让它成为一个字符串(不是我认为的数组,如果我错了,请纠正我)

4

4 回答 4

9

如果您只想要第一条消息,那么interest.errors.messages.first。如果你想要它们,那么类似的东西interest.errors.full_messages.join(", ")会将所有消息组合成一个字符串。

但是,您可能想复习一下ActiveRecord验证和错误。
这是一个很好的指南:

http://guides.rubyonrails.org/active_record_validations_callbacks.html

至少阅读:

于 2012-06-30T11:15:55.303 回答
4

.messages将返回所有错误的数组。哪怕只是一个。

因此,要正确显示它们,请在您的视图中执行此操作:

- for error in flash[:notice] do
  = error

或者,如果您喜欢html.erb

<%- for error in flash[:notice] do %>
    <%= error %>
<%- end %>
于 2012-06-30T11:11:04.917 回答
0

这对我有用:

<html>
  <body>
    <%= render 'layouts/header' %>
    <div class="container">
      <% flash.each do |key, value| %>
        <div class="alert alert-<%= key %>"><%= value %></div>
      <% end %>
      <%= yield %>
      <%= render 'layouts/footer' %>
      <%= debug(params) if Rails.env.development? %>
    </div>

  </body>
</html>
于 2014-12-11T21:29:10.750 回答
-1

interest.errors.messages.join(<any concatenating character>)将创建一个连接数组元素的字符串。

您可以使用字符串 - 例如 "、" 、 ":" 或几乎任何东西来连接。

于 2012-06-30T12:06:23.507 回答