在進行更新操作時,是否需要查看在更新記錄之前是否有任何記錄的屬性發生了更改?仍然必須致電查詢記錄。在進行數據庫調用之前,我應該檢查更新的屬性嗎?
我打算不首先打電話給api,除非用戶更新屬性,但不知道在操作本身中放置警衛是否合適。這是使用Rails和PostgreSQL
在進行更新操作時,是否需要查看在更新記錄之前是否有任何記錄的屬性發生了更改?仍然必須致電查詢記錄。在進行數據庫調用之前,我應該檢查更新的屬性嗎?
我打算不首先打電話給api,除非用戶更新屬性,但不知道在操作本身中放置警衛是否合適。這是使用Rails和PostgreSQL
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)>
這取決於您的需要。
首先,如果它只是一列,作爲我來說,我只是想檢查我用workflow gem.的model..so單attribute..state ..和我加入模型回調只有當該屬性改變這樣的...
##workflow_state is my column name
after_save :update_other_associations_status , if: :workflow_state_changed?
此外,您還可以使用column_was
如.. workflow_state_was
其保存在db.I前檢查舊值會建議看看ActiveModel::Dirty模塊
其次,如果你想查詢的模型的多個值,你可以用真棒papertrail,負責監測整個模型和它的高度可配置何時何地您需要捕捉的變動情況去模型的版本。
希望這會有所幫助