05 Feb 2015
使用ActiveModel::Errors#details
最近Rails新增了一个新特性,我们可以使用它获得一个validator类型的对象。
class User < ActiveRecord::Base
validates :name, presence: true
end
user = User.new
user.valid?
user.errors.details
# => {name: [{error: :blank}]}
在写api服务时,当你不需要返回一个翻译过的错误消息,而在客户端希望通过判断symbols来给用户以合适的提示时,这个特性会很方便。
你也可以传递额外的参数来添加自定义的错误类型。
class User < ActiveRecord::Base
validate :adulthood
def adulthood
errors.add(:age, :too_young, years_limit: 18) if age < 18
end
end
user = User.new(age: 15)
user.valid?
user.errors.details
# => {age: [{error: :too_young, years_limit: 18}]}
所有的内建validators默认都是以hash返回。
这个特性将在Rails 5.0中提供,不过你可以在Rails4.x项目中使用这个gem:active_model-errors_details。
英文原文:https://cowbell-labs.com/2015-01-22-active-model-errors-details.html
Til next time,
Jason Heylon
at 12:00