我正在做迈克尔·哈特尔的教程,接下来的一行让我头疼了一下:
user.microposts.create!(content: content)
通常,!运算符意味着它修改了调用它的对象。然而,在这种情况下,我发现省略了!仍然修改了用户变量AND将微博插入数据库中。是什么 !在这种情况下,运营商呢?
答案 0 :(得分:0)
如果模型无效,则Bang操作员(save!
create!
)会引发异常,非爆炸(save
,create
)只返回false
。
从这里http://edgeguides.rubyonrails.org/active_record_validations.html#when-does-validation-happen-questionmark
答案 1 :(得分:0)
差异是create!
会在失败时引发异常(可能是由于验证或其他回调),而create
则返回对象。
使用create
方法,您可以取回micropost
以检查是否存在任何错误:micropost.errors
。而您在create!