简单的Mongoid验证创建! - 如何显示错误消息

时间:2012-11-15 19:34:52

标签: ruby-on-rails ruby-on-rails-3 mongodb mongoid

我正在使用带有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错误消息页?

2 个答案:

答案 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