2017-10-19 54 views

回答

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)> 
0

它取決於如何完成更新。

如果模型不是dirty,ActiveRecord將不會在DB上進行實際更新。

您可以比較更新前後的update_at值,只有在更改後才觸發API。

0

這取決於您的需要。

首先如果它只是一列,作爲我來說,我只是想檢查我用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,負責監測整個模型和它的高度可配置何時何地您需要捕捉的變動情況去模型的版本。

希望這會有所幫助

相關問題