在我的照片班中,我有這種關聯。Rails如何在不鎖定的情況下觸摸活動記錄對象?
belongs_to :user, :touch => true
有一天我得到了這個例外。
A ActiveRecord::StatementInvalid occurred in photos#update:
Mysql::Error: Deadlock found when trying to get lock; try restarting transaction:
UPDATE `users` SET `updated_at` = '2011-09-20 14:17:44' WHERE `users`.`id` = 6832
production/ruby/1.8/gems/activerecord-3.0.10/lib/active_record/connection_adapters/abstract_adapter.rb:207:in `log'
我應該怎麼做才能防止這種情況發生?如果可能,我希望錯誤中顯示的更新語句不使用鎖定。我不認爲在這種情況下使用樂觀鎖定會起作用,因爲樂觀鎖定可能會引發ActiveRecord :: StaleObjectError。
感謝您的回答。這是2年後,我不完全確定我爲什麼使用觸摸。使緩存失效似乎是一個很好的理由。我現在使用清理器過期緩存條目。 http://guides.rubyonrails.org/caching_with_rails.html#sweepers。我不再使用觸摸了。 –
我喜歡valid_from的想法,但我認爲你需要在cache_key中添加類名,例如[class]/[id] - [timestamp]按照http://signalvnoise.com/posts/3113-如何琴鍵基於緩存過期,作品 – iheggie