有时我看到了!保存之后,以及其他一些主动记录方法......有什么区别?
答案 0 :(得分:13)
save
将返回false(例如验证错误)。
save!
将引发异常。当你非常确定它应该保存没有问题时使用save!
,如果它没有,那么它是一个非常大的bug和异常是合适的。
答案 1 :(得分:3)
使用的一般模式或惯例!在rails中的方法结束处指示函数可能引发异常,而非bang方法只返回一个值。
不抛出异常的后果允许您将返回值用作正常处理的一部分。
if obj.save # yay, it worked! else # boo end
请注意,这不是Ruby强制执行的规则,只是一种约定。其他库(如String的标准库)具有返回操作结果的方法,而不是修改对象的值。
String s="Hello, world" s.gsub("world", "Joe") # returns a new string object, leaving s alone s.gsub!("world", "Joe") # modifies the value of s