作者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