我看到很多书使用了像create!
或save!
这样的爆炸方法,但他们没有使用 rescue 块来捕获异常,例如,如果我采取阻止来自ruby on rails tutoriel book的代码:
def follow!(other user)
relationships.create!(followed_id: other_user.id)
end
这里michael hartl使用跟随! ,和爆炸方法创造!没有救援例外,有人可以向我解释我应该使用爆炸方法并且是否有必要为其添加救援?
谢谢
答案 0 :(得分:2)
我有一个一般规则:如果我不希望create
或save
等失败,我会使用爆炸版本。如果它永远不会失败,那么它没有任何区别,如果它因某个错误或数据损坏而失败,那么
save
可能会在某个时间意外失败,并且您可能会在几个月后发现它答案 1 :(得分:1)
我认为你已经知道bang方法(create!
等)会引发错误,而普通方法(create
)则不会。你的问题应该在哪里使用。嗯,它归结为人员偏好,这是没有正确的方法。但一般来说rails代码库(包括rails生成的默认代码)似乎都遵循这个
控制器中的普通方法
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
所以在我的拙见中,你不应该在你的控制器中使用爆炸方法。如果你这样做,请优雅地处理它们,以便用户得到一条有用的错误消息,说明出了什么问题,如何解决它而不是铁路着名" 出了问题"错误500页。