Nella mia classe di foto ho questa associazione.Rails come toccare l'oggetto Active Record senza bloccarlo?
belongs_to :user, :touch => true
Un giorno ho ricevuto questa eccezione.
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'
Cosa devo fare per evitare che si verifichino future eccezioni come questa? Vorrei che l'istruzione di aggiornamento mostrata nell'errore non utilizzasse il blocco se possibile. Non penso che utilizzare il blocco ottimistico funzionerà in questo caso, perché il blocco ottimistico probabilmente aumenterebbe un ActiveRecord :: StaleObjectError.
Grazie per la risposta. Sono passati 2 anni e non sono del tutto sicuro del perché stavo usando il tatto. Invalidare la cache sembra una buona ragione. Ora utilizzo le spazzatrici per far scadere le voci della cache. http://guides.rubyonrails.org/caching_with_rails.html#sweepers. Non uso più il touch da nessuna parte. –
Mi piace l'idea di valid_from, ma penso che sia necessario aggiungere anche il nome della classe nel cache_key, ad esempio [class]/[id] - [timestamp] come per http://signalvnoise.com/posts/3113- how-chiave-cache-scadenza-opere basate – iheggie