【问题标题】:Ruby on Rails Validation ErrorsRuby on Rails 验证错误
【发布时间】:2012-06-30 10:55:26
【问题描述】:

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

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

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"],我如何让它成为一个字符串(不是我认为的数组,如果我错了,请纠正我)

【问题讨论】:

    标签: ruby-on-rails ruby validation


    【解决方案1】:

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

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

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

    至少阅读:

    【讨论】:

    • 实际上应该是interest.errors.full_messages.join(', ') - 注意full_messages 而不是messages(至少在Rails 3.2 中是这样)
    【解决方案2】:

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

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

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

    或者如果你更喜欢html.erb

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

    【讨论】:

      【解决方案3】:

      这对我有用:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • @equipment.errors.messages.join(", ") => #<:orderedhash:0x007fbe12054650> 的未定义方法 `join'
        猜你喜欢
        • 1970-01-01
        • 2018-04-27
        • 2018-03-02
        • 1970-01-01
        • 1970-01-01
        • 2016-11-08
        • 2012-04-29
        • 2022-01-26
        • 1970-01-01
        相关资源
        最近更新 更多