在进行更新操作时,如果在进行数据库调用以更新记录之前是否有任何记录属性已更改,是否值得一看?仍然需要进行调用才能查找记录。
除非用户更新属性,否则我打算不首先调用api,但是不知道在操作本身放置一个警卫是否合适。这是使用Rails和PostgreSQL
答案 0 :(得分:1)
Rails / Activerecord将负责确保在真正需要时更新并且属性为changed?。这是一个通过控制台的例子
记录未更改时的情况。未进行更新查询
[9] pry(main)> user = User.last
User Load (0.1ms) SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT ? [["LIMIT", 1]]
=> #<User:0x007fee16801108 ...>
[10] pry(main)> user.save
(0.1ms) begin transaction #<====== NO UPDATE QUERY IS MADE
(0.0ms) commit transaction
=> true
[11] pry(main)>
记录更改时的情况。更新查询
[12] pry(main)> user = User.last
User Load (0.1ms) SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT ? [["LIMIT", 1]]
=> #<User:0x007fee12c02558 id: 1,...?
[13] pry(main)> user.name = 'f'
=> "f"
[14] pry(main)> user.save
(0.1ms) begin transaction #<====== UPDATE QUERY IS MADE
SQL (0.3ms) UPDATE "users" SET "name" = ?, "updated_at" = ? WHERE "users"."id" = ? [["name", "f"], ["updated_at", "2017-10-19 06:56:51.385277"], ["id", 1]]
"complete"
(2.2ms) commit transaction
=> true
[15] pry(main)>
答案 1 :(得分:0)
答案 2 :(得分:0)
这取决于你的需要。
首先, 如果它只有一列 ,在我的情况下,我只是想检查一个属性...的状态model..so我使用了workflow gem. ..我只在该属性改变时添加了模型回调......
##workflow_state is my column name
after_save :update_other_associations_status , if: :workflow_state_changed?
此外,您还可以使用column_was
例如.. workflow_state_was
检查旧值,然后将其保存在db中。我建议您查看ActiveModel::Dirty模块
其次, 如果您想检查模型的多个值 ,您可以选择真棒papertrail,监控整个模型及其高度可配置性,以及何时何地需要捕获模型版本中的更改。
希望这有帮助