我正在使用带有mongoid 2的Rails 3并且有一个关于mongoid验证的简单问题。
if @forum.topics.create!(name: params[:topic][:name])
# success, do something
else
#should handle errors but doesn't
render 'new'
end
如果我使用.create!方法,它正确地在mongoid模型类上运行验证,但它没有到达else块来显示错误。相反,它返回一个rails错误页面,说...
Mongoid :: Errors :: TopicsController中的验证#create
验证失败 - 名称不能为空。
这很好,但是如何在视图中显示它而不是获得一个丑陋的rails错误消息页?
答案 0 :(得分:5)
尝试这种方式:
new_topic = @forum.topics.new(name: params[:topic][:name])
if new_topic.save
# success, do something
else
render 'new', errors: new_topic.errors.full_messages
end
通过这种方式,您将拥有本地变量errors
,这是一个格式如下的Hash:
new_topic.errors.full_messages # => ["\"Name\" can't be blank"]
答案 1 :(得分:0)
你可以拯救 Mongoid::Errors::Validations 并使用它的实例方法来获取错误
new_topic = @forum.topics.new(name: params[:topic][:name])
new_topic.create!
rescue Mongoid::Errors::Validations => e
summary = e.summary
problem = e.problem
res = e.resolution
使用上面的错误信息可以显示错误
文档链接 https://docs.mongodb.com/mongoid/6.2/api/Mongoid/Errors/Validations.html