我有一个i18n文件:
en: activemodel: errors: messages: email_address: "%{email} is not a valid email"
我有一个电子邮件的自定义验证器:
class EmailFormatValidator < ActiveModel::EachValidator def validate_each record, attribute, value record.errors.add attribute, (options[:message] || :email_address) unless value =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/ end end
如何将%{email}
的值从验证器上方传递到i18n yml文件?我一直收到这个错误:
missing interpolation argument :email in "%{email} is not a valid email" ({:model=>"Signup", :attribute=>"Email", :value=>"sdsdfsdf"} given)
答案 0 :(得分:2)
在错误消息中,已翻译的model
名称,已翻译的attribute
名称和value
始终可用于插值。
正如您在异常消息中所看到的那样:
缺少插值参数:“%{email}中的电子邮件不是有效的电子邮件”( {:model =&gt;“注册”,:attribute =&gt;“电子邮件”,:value =&gt;“sdsdfsdf “} 给定)
因此,您需要使用%{value}
在错误消息中获取实际值"sdsdfsdf"
:
email_address: "%{value} is not a valid email"
这将显示:Email sdsdfsdf is not a valid email
。但是,如果您想要更改所有错误消息的格式,可以在本地化的errors.format
键下进行:
en:
errors:
# The default format to use in full error messages. "%{attribute} %{message}"
format: "%{message}"