Kva*_*ass 37 ruby ruby-on-rails-3 railstutorial.org
所以我知道bang(感叹号)和非bang方法之间的区别通常是方法是修改对象本身还是返回一个单独的修改对象,保持原始不变.
然后在本书的第6章中构建User模型时,我遇到了这个User.create方法,它创建了一个新模型并将其保存到数据库中.在Michael Hartl的Ruby on Rails 3教程中,他写道,该User.create!方法"就像create方法一样工作......除非它在创建失败时引发ActiveRecord :: Record-Invalid异常".
我很困惑.是User.create!方法不是下面的Ruby"砰-公约"还是我完全失去了一些东西?如果他遵循惯例,User.create!如果它是一个类方法,如何修改self?
Dyl*_*kow 66
虽然很多类将bang方法视为"一种修改对象的方法",但我更喜欢Eloquent Ruby书中对bang方法的描述:
在实践中,Ruby程序员保留!装饰那些做出意想不到的事情或者有点危险的方法的名字
因此,在这种情况下,"意外"结果是引发异常而不是仅失败并返回false.
KcC*_*cC0 14
希望这也有帮助:
如果记录无效,爆炸版本(例如save!)会引发异常.非爆炸版本不会:save和update_attributes返回false,创建和更新只返回对象.
资料来源:http://edgeguides.rubyonrails.org/active_record_validations.html#when-does-validation-happen-questionmark
编辑:更改源以修复损坏的链接
| 归档时间: |
|
| 查看次数: |
25254 次 |
| 最近记录: |