rails 3 - widget.save和widget.save之间的区别!

时间:2011-03-11 09:00:16

标签: ruby-on-rails activerecord

有时我看到了!保存之后,以及其他一些主动记录方法......有什么区别?

2 个答案:

答案 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