Ruby on Rails验证错误

时间:2012-06-30 10:55:27

标签: ruby-on-rails ruby validation

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

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

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 个答案:

答案 0 :(得分:9)

如果您只想要第一条消息,请interest.errors.messages.first。如果你想要它们,那么像interest.errors.full_messages.join(", ")这样的东西会把所有的消息分成一个字符串。

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

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

至少阅读:

答案 1 :(得分:4)

.messages将返回所有错误的数组。即使它只是一个。

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

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

或者如果您更喜欢html.erb

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

答案 2 :(得分: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>

答案 3 :(得分:-1)

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

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