詳細介紹-validate:http://guides.rubyonrails.org/active_record_validations.html
詳細介紹-自訂警語:http://guides.rubyonrails.org/i18n.html#translations-for-active-record-models
參考來源:http://stackoverflow.com/questions/808547/fully-custom-validation-error-message-with-rails
參考文章:http://ricostacruz.com/cheatsheets/rails-i18n.html
下載 rails-i18n:https://github.com/svenfuchs/rails-i18n
上一篇是介紹如何新增自訂欄位,這一篇就來教大家怎麼增加自訂欄位的驗證,雖然只有短短幾行,卻花費了我好多時間…總之,在打算放棄devise時,讓我找到了解答,還好最後還是守住了,神啊~讓我之後順利點吧!
打開app/models/user.rb檔,加入我們想要驗證的欄位名稱
validates :cname, presence: true
validates :phone1, numericality: true, length: { in: 9..12 }
validates :zipcode, numericality: { only_integer: true }, length: { in: 3..5 }
validates :address, presence: true
編輯Gemfile,加上
# 語系檔
gem "rails-i18n"
執行指令
$ gem install rails-i18n
在config/locales/下新增一個zh-TW.yml的檔案,用來指定各欄位顯示的文字,models用來指定rails/locale/底下的%{resource}名稱。
zh-TW:
activerecord:
models:
user: "會員資料"
attributes:
user:
cname: "姓名"
email: "信箱"
phone1: "電話1"
zipcode: "郵遞區號"
address: "地址"
password: "密碼"
password_confirmation: "確認密碼"
編輯config/application.rb
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. config.i18n.load_path += Dir[Rails.root.join('rails', 'locale', '*.{rb,yml}').to_s] config.i18n.default_locale = "zh-TW" #devise_error config.action_view.field_error_proc = Proc.new { |html_tag, instance| "<font style=\"color: #CC0000;\">#{html_tag}</font>".html_safe }
因為我發現 install 後檔案還是沒出現,可能要自行放上吧,如果你也是,就把下載 rails-i18n的檔案放到專案中,不過…我並沒有全放就是了,我放上的檔案如下:
- bin/i18n-tasks, rspec
- config/i18n-tasks.yml
- lib (all)
- rails (all)
- space (all)
- rails-i18n.gemspec
- locales.thor
編輯 rails/locale/zh-TW.yml,把%{model}的部份取代為%{resource},並加上下列程式碼(綠色部份)
執行程式,連結到註冊頁面,按下SIGN UP鈕就可以看到下圖的警告視窗。
errors: format: "%{attribute} %{message}" messages: not_saved: one: 有 1 個錯誤發生使得「%{resource}」無法被儲存。 other: 有 %{count} 個錯誤發生使得「%{resource}」無法被儲存。
執行程式,連結到註冊頁面,按下SIGN UP鈕就可以看到下圖的警告視窗。
欄位文字的部份則會變成粗體紅字。
希望大家也能順利完成,本篇就到此結束,終於…寫了好幾個星期…
沒有留言:
張貼留言