Re: [問題] Active Scaffold 要如何回報錯誤訊息?

看板Ruby作者 (godfat 真常)時間17年前 (2007/08/29 17:56), 編輯推噓2(203)
留言5則, 3人參與, 最新討論串4/4 (看更多)
由於我又快睡著了,所以就開始 trace rails... 我真的覺得,rails 好不好用先不說,他本身的程式碼真的是很漂亮, 把 ruby 精神發揮地非常徹底。 ※ 引述《shelary (台中喵小咩)》之銘言: : def validate : errors.add(:name,'名字裡不能有笨字哦!!' ) if name.index('笨') != nil : end : 他秀出來的訊息是英文的...例如: : 1 error prohibited this record from being saved : There were problems with the following fields: : ‧Name 名字裡不能有笨字哦!! : 請問...英文的部份要怎麼改成中文呢?? 之前 thegiive 跟我說,建議 error message 自己做, 不只是中英文的問題,顯示方式他似乎也不太喜歡預設的。 而根據我一路追下去的結果,error_messages_for 上的註解也這樣寫: (p.s. 根據 bbs 重新排版了) # NOTE: This is a pre-packaged presentation of the errors with # embedded strings and a certain HTML structure. If what you need # is significantly different from the default presentation, # it makes plenty of sense to access the object.errors instance # yourself and set it up. View the source of this method to see # how easy it is. 不過如果只是希望 attribute 能顯示中文,其他地方不需要改的話, 動這邊確實有點大動干戈﹍。 p.s. error_messages_for 我是從這邊追來的: vendor/plugins/active_scaffold_upload/frontends/default/views/ _form_messages.rhtml (^^^^^^^ 我目前用的版本) 所以再從 error_messages_for 裡開始追查,可以看到: object.errors.full_messages..... 於是再去尋找 full_messages, 在 ActiveRecord::Errors#full_messages 裡。 可以看到他呼叫:@base.class.human_attribute_name(attr) 也就是說,他其實是呼叫你的 model class 的 human_attribute_name 再去追查他的實做,可以看到: # Transforms attribute key names into a more humane format, such as # "First name" instead of "first_name". Example: # Person.human_attribute_name("first_name") # => "First name" # Deprecated in favor of just calling "first_name".humanize def human_attribute_name(attribute_key_name) #:nodoc: attribute_key_name.humanize end 所以其實只要改寫這段程式碼就可以了,如: class User def self.human_attribute_name attr case attr when :name then '名字' when :ouch then '好痛' end end end 要善加利用 open source 啊 ccc -- In Lisp, you don't just write your program down toward the language, you also build the language up toward your program. 《Programming Bottom-Up》- Paul Graham 1993 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.218.90.242

08/29 23:17, , 1F
感謝~~原來如此..本來都是搞到要用多語化那個套件
08/29 23:17, 1F

08/30 11:37, , 2F
我後來還是在 helper 覆蓋改寫 error_messages_for
08/30 11:37, 2F

08/30 11:38, , 3F
必竟一般人還是不習慣看英文的訊息..尤其是錯誤訊息
08/30 11:38, 3F

08/30 11:39, , 4F
光改欄位名..如果欄位一多..反而更麻煩..
08/30 11:39, 4F

09/06 18:11, , 5F
用hash可以辦到阿..0.0"
09/06 18:11, 5F
文章代碼(AID): #16rKBCIn (Ruby)
文章代碼(AID): #16rKBCIn (Ruby)