活动记录 #increment!返回 false,但没有错误



这是我控制器中的一段代码:

  @post.increment!(:views_count) # => false, record not saved, views_count is 0
  @post.errors                   # => is empty
  @post.save!                    # => true, views_count magically incremented to 1

问题是,如果没有 #save!,它就不起作用:记录不会更新,views_count是0。有什么想法吗?

您是否尝试过重新加载记录?我敢打赌您正在查看该文件的缓存版本。尝试:

@post.increment!(:views_count)
@post.reload
我认为

您使用该方法的方式没有任何问题。

当无法保存记录时,increment!返回 false。

我认为您可以尝试的一种可能的事情是将 views_count 属性初始化为 0。我认为它目前可能是nil而不是整数值。在nil值上,您无法执行+=运算符。

要初始化属性的值,请在 db/migrate 文件夹下找到该属性的迁移文件。

将属性代码修改为如下所示的内容。

t.integer :views_count, default: 0

或者,如果您在创建表之外单独添加了列...

add_column :appropriate_model, :views_count, :integer, default: 0

请注意,increment!调用 update_attribute ,而 又调用 save(:validate => false) 。这将跳过验证,但仍会执行回调链,并且:

如果任何 before_* 回调返回 false,则操作将被取消,保存返回 false。

您的模型中是否定义了任何可能返回 false 但不errors设置任何内容的before_*回调?

相关内容

最新更新