rails 3验证器&国际化

时间:2011-02-26 08:17:03

标签: ruby-on-rails-3 internationalization validation

所以我刚开始在rails 3中使用自定义验证器,但是我不确定我是否可以使用我现有的activerecord i18n语言环境文件。似乎我必须这样做

record.errors[attribute] << I18n.t('activerecord.errors.models.{model}.attributes.{attribute}.invalid_whatever') if ...

而不是之前我刚刚完成

:message => :invalid_whatever

我可以在我的ActiveModel:Validator / EachValidator类中使用简写来完成同样的事情吗?

2 个答案:

答案 0 :(得分:16)

我遇到了同样的问题,终于找到了答案......

record.errors.add(attribute,:invalid_whatever)

答案 1 :(得分:2)

如果您最终阅读此问题(截至本文撰写时已有几年),您可以尝试以下Rails 4:

在您的模型中
class Document < ActiveRecord::Base validates :date, date_in_present: {message: :custom_message} end

在您的验证码中:
class DateInPresentValidator < ActiveModel::EachValidator def validate_each(object, attribute, value) if(value.to_date >= Date.today) true else object.errors[attribute] << options[:message] end end end

在您的i18n yml文件中:
en: activerecord: errors: models: document: attributes: date: custom_message: Date is not in present

我没有彻底测试过。

您还可以在自定义验证程序中指定回退消息:
object.errors[attribute] << (options[:message] || "Display this message if message is not in options")