5

Rails3とMongoid2を使用していますが、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このようにして、次のようにフォーマットされたハッシュであるローカル変数が得られます。

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 に答える