【问题标题】:Rails -- create and create! methods, RoR 3 TutorialRails——创造和创造!方法,For 3 教程
【发布时间】:2011-09-13 02:16:35
【问题描述】:

所以我知道 bang(感叹号)和非 bang 方法之间的区别通常是该方法是修改对象本身还是返回一个单独的修改后的对象,保持原始不变。

然后在本书第 6 章中构建 User 模型时,我遇到了 User.create 方法,该方法只需一步即可创建一个新模型并将其保存到数据库中。在 Michael Hartl 的 Ruby on Rails 3 教程 中,他写道 User.create! 方法“与 create 方法一样工作......除了它引发了一个 ActiveRecord::Record-Invalid 创建失败时异常。”

我很困惑。 User.create! 方法是不是遵循 Ruby “bang-convention”,还是我完全遗漏了什么?而如果他是遵守约定的,User.create!如果是类方法怎么修改self呢?

【问题讨论】:

    标签: ruby ruby-on-rails-3 railstutorial.org


    【解决方案1】:

    虽然很多类都将 bang 方法视为“就地修改对象的方法”,但我更喜欢 Eloquent Ruby book 中对 bang 方法的描述:

    在实践中,Ruby 程序员保留 !修饰方法的名称 出乎意料的事情,或者可能有点 危险的

    所以在这种情况下,“意外”的结果是引发了异常,而不是仅仅失败并返回 false

    【讨论】:

      【解决方案2】:

      希望这也有帮助:

      如果记录无效,bang 版本(例如保存!)会引发异常。非爆炸版本不会:save 和 update_attributes 返回 false,create 和 update 只返回对象。

      来源:http://edgeguides.rubyonrails.org/active_record_validations.html#when-does-validation-happen-questionmark

      编辑:更改源以修复损坏的链接

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-01
        • 2017-12-19
        • 1970-01-01
        相关资源
        最近更新 更多