我正在开展一个项目,我希望将应用中使用的所有字符串移动到一个文件中,以便轻松更改和更新它们。但是我在自定义验证方面遇到了麻烦。我的应用程序中的验证如下:
validate :thing_is_correct
def thing_is_correct
unless thing.is_correct
errors[:base] << "Thing must be correct"
end
end
我不确定如何将“Thing must correct”移动到我的en.yml文件中并移出模型。任何帮助将不胜感激。
答案 0 :(得分:0)
您可以访问模型中的I18n。
validate :thing_is_correct
def thing_is_correct
unless thing.is_correct
errors[:base] << I18n.t('mymodel.mymessage')
end
end
内部config/locales/en.yml
en:
mymodel:
mymessage: "Thing must be correct"
在另一个区域设置中:(config/locales/es.yml
)
es:
mymodel:
mymessage: "Esto debe ser correcto"
如果您设置I18n.locale = :en
,则会显示en.yml
内的消息。如果您将其设置为:es
,则会使用es.yml
内的{。}}。
答案 1 :(得分:0)
Rails这样做的方法是使用the mechanism described in the Guides。
errors
是ActiveModel::Errors
的一个实例。可以通过调用ActiveModel::Errors#add
添加新消息。正如您在文档中看到的那样,您不仅可以传递消息,还可以传递表示错误的符号:
def thing_is_correct
unless thing.is_correct?
errors.add(:thing, :thing_incorrect)
end
end
Active Model将自动尝试从指南中描述的命名空间中获取消息(请参阅上面的链接)。实际消息是使用ActiveModel::Errors#generate_message
生成的。
总结一下:
errors.add(:think, :thing_incorrect)
thing_incorrect
。