如何解决Rails-创建和创建!方法,RoR 3教程
| 因此,我知道bang(感叹号)和非bang方法之间的区别通常是该方法是修改对象本身还是返回单独的修改后的对象,从而使原始对象保持不变。 然后,在本书第6章中构建用户模型时,我遇到了User.create
方法,该方法创建一个新模型并将其保存到一个步骤中。在迈克尔·哈特尔(Michael Hartl)的Ruby on Rails 3教程中,他写道User.create!
方法\“的工作方式与create
方法相同……不同之处在于,如果创建失败,它将引发ActiveRecord :: Record-Invalid异常。\”
我很困惑。 User.create!
方法是否不遵循Ruby的“ bang-convention \”,还是我完全错过了一些东西?并且,如果他遵循约定,如果ѭ1class是一个类方法,他该如何修改自己?
解决方法
尽管许多类将bang方法视为“一种在适当位置修改对象的方法”,但我更喜欢Eloquent Ruby书中对bang方法的描述:
实际上,Ruby程序员会保留
!修饰执行方法的名称
出乎意料的事情,或者也许是一点
危险的
因此,在这种情况下,“意外的”结果是引发了异常,而不仅仅是失败并返回
false
。
, 希望这也有帮助:
如果记录无效,则爆炸版本(例如,保存!)引发异常。非爆炸式版本不会:save和update_attributes返回false,创建和更新仅返回对象。
资料来源:http://edgeguides.rubyonrails.org/active_record_validations.html#when-does-validation-happen-questionmark
编辑:更改源以修复断开的链接
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。