ruby-on-rails - 将字段增加一些数字而不更新时间戳
问题描述
在他创建reputation
一个. 这是我到目前为止所尝试的:User
Post
简单的解决方案是:
User.find(id).increment!(reputation: 10)
但是,这也更新了该updated_at
字段。
我寻找一种在不更新时间戳的情况下更新计数器的方法,发现了这个:
User.increment_counter(:reputation, id)
但是这个方法加reputation
1。
我还发现该update_column
方法不会更新时间戳。但是,我似乎不能将它用作单行查询。
因为,我必须在用户创建帖子后更新他的声誉。所以,在我的Post
模型中,
after_create_commit { self.user.update_column(reputation: (self.user.reputation + 10))}
此查询正在调用self.user
(获取当前帖子的关联用户)2 次,我该如何避免这种情况。
或者
有没有其他方法可以在不更新时间戳的情况下增加。
谢谢
更新:
找到了一种解决方案,update_counters
方法(在下面的答案中添加)。
如果有人知道任何其他方法,或者可以帮助我如何在不调用self.user
两次的情况下使用 update_column,请帮助我。谢谢
解决方案
没关系,找到了解决方案。所以,显然,update_counters
方法正是我需要的。
User.update_counters :id,:reputation => 10
谢谢。
链接:铁路更新计数器方法
推荐阅读
- java - java如何设置自增属性
- php - 使用php的rest api的端点url
- r - 在一个字符串中最多选择两个字母
- python - 根据熊猫数据框中另一列的情况将 int64 值替换为“无”
- javascript - 如何向数组键添加新值
- c - 关于带有prinf函数的输入输出的C语言我完全输入yes但是为什么我看不到输出?
- php - fgetcsv & glob - 删除限制但停止在 10000 个文件
- go - 是否可以在 golang 中使用反射来获取用户定义类型的底层类型?
- database - 当您读取实体关系时,您是从实体的一侧读取基数,还是从关系中的每个实体读取基数?
- spring - 如何使用托管在 Tomcat 上的 Spring Boot 应用程序从 Docker 容器通过 JDBC 访问 Oracle AWS RDS