不要讓你的Rails Validate嚇著了使用者

2021-06-16 12:27:20 字數 1417 閱讀 6684

activerecord validations 是rails很方便的一項特性,由於它如此好用,我們經常使用它,讓使用者看著了不舒服的資訊,比如下面所說的例子:

舉個例子,比如現在我要在使用者註冊的時候驗證 social security number (ssn) ,一般**會是這個樣子的:

ruby**  

class user 

validates_presence_of :ssn

validates_length_of :ssn, :is => 9  

validates_numericality_of :ssn

validates_uniqueness_of :ssn

validates_as_ssn :ssn

# checks if a reserved or special ssn was sent

end

根據以上的配置,如果使用者忘記填入ssn,那個頁面上會顯示4個錯誤提示資訊:

問題是,使用者只是沒有填入ssn,我們應該只顯示一條不為空的資訊啊,為什麼要將其它的不相關的資訊也顯示出來嚇著了使用者呢?

解決這個問題的方法很簡單,我們可以使用:allow_blank 選項,因此那其它的驗證在ssn號為空的時候是不空觸發的:

ruby**  

class user 

validates_presence_of :ssn

validates_length_of :ssn, :is => 11, :allow_blank => true

validates_numericality_of :ssn, :allow_blank => true

validates_uniqueness_of :ssn, :allow_blank => true

validates_as_cpf :ssn, :allow_blank => true

end

還可以使用rails框架給object新增的object#with_options

這個方法:

ruby**  

class user 

validates_presence_of :ssn

with_options :allow_blank => true

do |v|  

v.validates_length_of :ssn, :is => 11  

v.validates_numericality_of :ssn

v.validates_uniqueness_of :ssn

v.validates_as_cpf :ssn

endend

這以上舉的只是乙個例子,還有如 validates_confirmation_of :password ,

只有在確認密碼不為空的時候才驗證confirmation

不要讓你的程式死掉

前陣子在csdn上看到乙個帖子 論程式的成長 你寫的 有生命力嗎?感觸良多。加上實習到現在已經可以說是整整的工作3年了,其中做了一些專案也發現了一些共性。自己也寫了一些通用的 塊,但是種種原因,沒有一直堅持的維護下去,讓它們不斷的完善 公升級。也就漸漸的失去了生命力,能發揮的作用也越來越小。一直都在...

不要讓經驗禁錮你的程式設計思維

最近我正在讀do more faster這篇文章,雖然此文好像有點是在為techstars的建立做宣傳,但是還是不失為一篇好文。最讓我印象深刻的是,有些明明已經有了成功的條件,至少創業資金是不缺的,但是事到臨頭,卻不知道該如何著手去程式設計。學會程式設計,他們就能夠實現自己的想法,學以致用了。打個比...

不要讓經驗禁錮你的程式設計思想

最近我正在讀do more faster這篇文章,雖然此文好像有點是在為techstars的建立做宣傳,但是還是不失為一篇好文。最讓我印象深刻的是,有些明明已經有了成功的條件,至少創業資金是不缺的,但是事到臨頭,卻不知道該如何著手去程式設計。學會程式設計,他們就能夠實現自己的想法,學以致用了。打個比...