ruby - Rails——创造再创造!方法,RoR 3 教程

标签 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 的“bang-convention”还是我完全遗漏了什么?如果他遵循约定,User.create! 如果它是一个类方法,如何修改 self?

最佳答案

尽管很多类将 bang 方法视为“一种就地修改对象的方法”,但我喜欢 Eloquent Ruby book 中对 bang 方法的描述。更好:

In practice, Ruby programmers reserve ! to adorn the names of methods that do something unexpected, or perhaps a bit dangerous

因此在这种情况下,“意外”结果是引发异常,而不是失败并返回 false

关于ruby - Rails——创造再创造!方法,RoR 3 教程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6316821/

相关文章:

ruby - 哈特尔章。 9.2.2 测试失败

ruby-on-rails - Hartl 的 Rails 教程完成的作品局部完美。 Heroku 始终显示 "We',抱歉,但出了点问题。”

sql - Ruby:做一个字符串缓存,哪个更快:数组还是 SQL?

sql - Rails 4 LIKE 查询 - ActiveRecord 添加引号

ruby - Perl 相当于 Ruby 的 `reject!` ?

ruby-on-rails - 如何从 selenium 迁移到 capybara-webkit?

ruby-on-rails - Michael Hartl 的 Rails 教程第 12 章——所有 54 个测试都失败了……?

ruby-on-rails - Heroku Rails Rake 任务同步生产和本地数据库

ruby-on-rails - Rails 3 迁移中使用 rename_column 后出现未知属性错误

ruby-on-rails-3 - Activeadmin 和 Formtastic : form not responding to :size