Ruby on rails RubyonRails验证错误

Ruby on rails RubyonRails验证错误,ruby-on-rails,ruby,validation,Ruby On Rails,Ruby,Validation,我已经建立了一个小应用程序,可以接收电子邮件地址并保存它,我已经在模型上建立了验证(唯一有效的电子邮件),这两个都可以工作 我正在使用下面的代码尝试保存电子邮件,如果它已经存在或它不是有效的格式,它需要停止并设置错误消息 def create interest = KnownInterest.new( :email => params[:email] ) if(interest.valid? and interest.save) flash[:notice]

我已经建立了一个小应用程序,可以接收电子邮件地址并保存它,我已经在模型上建立了验证(唯一有效的电子邮件),这两个都可以工作

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

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

这会弹出[“Email not valid”],如何将其转换为字符串(不是我认为的数组,如果我错了请更正)

。消息将返回一个包含所有错误的数组。即使只是一个

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

- for error in flash[:notice] do
  = error
或者如果您更喜欢
html.erb

<%- for error in flash[:notice] do %>
    <%= error %>
<%- end %>

如果您只想要第一条消息,那么
兴趣。错误。消息。第一条
。如果您想要所有消息,那么类似于
interest.errors.full_messages.join(“,”)
的内容会将所有消息分组为一个字符串

但是,您可能希望重新了解
ActiveRecord
验证和错误。
这里有一个很好的指南:

请至少阅读:

  • 第7节:
  • 第8节:

interest.errors.messages.join()
将创建连接数组元素的字符串


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

这一个适合我:

<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>


这实际上应该是
interest.errors.full_messages.join(',')
-注意
full_messages
,而不是
messages
(至少在Rails 3.2中是这样)@device.errors.messages.join(“,”=>未定义的方法“join”#