2011-03-11 37 views
4

有时我看到了!保存后,和其他一些有效的记录方法...有什么区别?rails 3 - widget.save和widget.save的区别!

+0

可能的重复[保存/保存的内容!做什么?](http://stackoverflow.com/questions/1997201/what-exactly-does-save-save-do) – 2011-03-11 09:07:59

回答

3

使用的一般模式或约定!在rails中的方法的末尾指示该函数可能会引发异常,而non-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 
+0

非常有帮助谢谢! – jpwynn 2011-03-11 17:41:18

+0

按照惯例,方法名称中唯一的'!'意味着它是一个潜在的危险操作。 “危险”的常见情况是会引发异常,或者会自行修改结果。但也有许多其他不太常见的情况。 – 2011-03-11 17:45:32

13

save如果记录无法保存(例如验证错误)将返回false。

save!如果记录无法保存,将引发异常。使用save!当你很确定它应该保存没有问题,如果它不,那么它是一个非常大的错误和一个例外是适当的。

+0

谢谢你这个......也给了它一个投票。 – jpwynn 2011-03-11 17:42:27