2012-06-30 281 views
5

我是一個超級紅寶石/ rails新手,所以你將不得不裸露在這裏。Ruby on Rails驗證錯誤

我已經設置了一個需要電子郵件地址並保存它的小應用程序,我已經在模型上設置了驗證(唯一且有效的電子郵件)並且這兩者都可以工作。

我使用下面的代碼,試圖保存電子郵件,如果它已經存在或者它不是一個有效的格式,它需要沒有停止,並設置錯誤消息

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 

這個吐出[「電子郵件有效「],我如何得到這是一個字符串(不是我想是一個數組,糾正我,如果我錯了)

非常感謝

回答

9

如果你只是想第一條消息,然後interest.errors.messages.first。如果你想要它們,那麼像interest.errors.messages.join(", ")這樣的東西將把所有的消息分組成一個字符串。

但是,您可能需要刷新ActiveRecord驗證和錯誤。
這裏是一個不錯的指南:

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

閱讀至少:

+4

這實際上應該是'interest.errors.full_messages.join( '')' - 作者注'full_messages',而不是'messages'(至少是這樣的case在Rails 3.2) – Tinynumbers

4

.messages將返回所有錯誤的數組。即使它只是一個。

因此,要正確地顯示他們,這樣做在你的觀點:

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

或者如果你喜歡html.erb

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

interest.errors.messages.join(<any concatenating character>)將創建一個字符串拼接你的數組元素。

您可以使用字符串 - 例如「,」,「:」或幾乎任何要連接的字符串。

+1

@ equipment.errors.messages.join(「,」)=>未定義的方法'加入'爲# notaceo

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>