作者godfat (godfat 真常)
看板Ruby
標題Re: [問題] Active Scaffold 要如何回報錯誤訊息?
時間Wed Aug 29 17:56:24 2007
由於我又快睡著了,所以就開始 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
1F:推 ryudo:感謝~~原來如此..本來都是搞到要用多語化那個套件 08/29 23:17
2F:推 shelary:我後來還是在 helper 覆蓋改寫 error_messages_for 08/30 11:37
3F:→ shelary:必竟一般人還是不習慣看英文的訊息..尤其是錯誤訊息 08/30 11:38
4F:→ shelary:光改欄位名..如果欄位一多..反而更麻煩.. 08/30 11:39
5F:→ zusocfc:用hash可以辦到阿..0.0" 09/06 18:11