2014-01-16 28 views
0

我有一個Rails應用程序,使用Devise進行用戶註冊/管理。url輸入字段在客戶端驗證,但沒有其他字段是

在我的用戶模型中,我有以下幾點:

validates :first, presence: true 
validates :last, presence: true 
validates :email, presence: true, format: {with: VALID_EMAIL_REGEX}, uniqueness: {case_sensitive: false} 
validates :url, format: {with: NO_SPACES_REGEX}, presence: true 

在填寫表格,如果我不填寫網址欄,並提交表單,我收到以下消息(氣球指向URL輸入框):

請輸入網址。

這發生在客戶端。如果填寫表單中的URL字段以及其他任何必填字段,表單將提交,然後我會在單獨的紅框中收到消息,要求我輸入缺少的值。

任何想法爲什麼url字段是唯一一個驗證本地,提交表單前,但沒有其他形式是?

這個領域唯一的其他獨特之處是它的形式分配給它的值:

<div class="control-group"> 
    <div class="control-label"><%= f.label :url, URL_STR %></div> 
    <div class="controls"><%= f.url_field :url, :value => "http://", :class => "request-text-line" %></div> 
</div> 

其他領域都沒有分配給它們的值。

回答

2

原因是在類型的領域。如果你在瀏覽器中查看源代碼,你會發現這個類型是「url」。 hltm5中有許多類型可觸發客戶端驗證。部分列表是電子郵件,網址,號碼,電話,日期,但還有更多。您通過使用url_field觸發了此操作,導致該類型爲「url」,導致客戶端驗證。正常的文本字段不會這樣做(不能這樣做)。但是,例如,您的電子郵件領域,你可以這麼用email_field

如果您想了解更多關於這個類似的東西,我可以向您推薦http://www.the-art-of-web.com/html/html5-form-validation/