ActiveRecord#增量!返回false,但没有错误
这里有一段代码在我的控制器:ActiveRecord#增量!返回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'方法](http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-increment)的来源表明,如果属性值为'nil',则将属性值初始化为0 :'self [attribute] || = 0' – Brandan 2012-07-21 21:55:14
注意increment!
电话update_attribute
,进而调用save(:validate => false)
。也就是说跳过验证,但the callback chain is still executed和:
如果任何before_的*回调返回false,操作取消,并保存返回false。
你有你的模型中定义的任何before_*
回调可能被返回false,但在errors
没有设置什么吗?
您可以发布控制器代码的其余部分,至少是正在执行的操作以及可能的模型吗? – Brandan 2012-07-21 21:56:00