0

create!orのような bang メソッドを使用する本をたくさん見ますが、例外をキャッチするためにレスキューブロックをsave!使用しません。

def follow!(other user)
 relationships.create!(followed_id: other_user.id)
end

ここでマイケル・ハートルの使用に従ってください!、および bang メソッドを作成します。レスキューの例外がなければ、いつバンメソッドを使用する必要があるかを説明できますか?レスキューを追加する必要がありますか?

ありがとうございました

4

2 に答える 2

1

create!bang メソッド (など) はエラーを発生させますが、plain メソッド ( ) は発生させないことは既にご存じだと思いますcreate。あなたの質問は、どこで使用する必要があるかです。まあ、それは個人の好みに帰着しますが、これは正しい方法ではありません。しかし、一般的にレールコードベース(レールによって生成されたデフォルトコードを含む)はこれに従っているようです

コントローラーの単純なメソッド

def create
 @post = Post.new
 @post = params[:posts]
 if @post.save 
    #success, redirect_to  new post & set succcess flash 
 else
    #failure, render new action again with errors 
end

テストでの Bang メソッド

it "creates a new post" do
   p = Post.create! :title => '' #auto raise an error on validation failure             
   p.should do_something
end

私の謙虚な意見では、コントローラーで bang メソッドを使用しないでください。その場合は、レールの有名な「何かが間違っていました」エラー500ページの代わりに、何が間違っていたのか、それを修正する方法を示す役立つエラーメッセージがユーザーに表示されるように、それらを適切に処理してください。

于 2013-05-27T17:09:51.773 に答える