5

我正在使用带有 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错误页面,说......

TopicsController#create 中的 Mongoid::Errors::Validations

验证失败 - 名称不能为空。

这很好,但是我如何在视图中显示它而不是获得丑陋的 Rails 错误消息页面?

4

2 回答 2

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"]
于 2012-11-15T19:42:55.697 回答
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

于 2021-06-02T10:46:53.850 回答