Credo che questo sia un bug in Rails 3. Spero che qualcuno qui possa guidarmi nella direzione corretta. Il codice pubblicato di seguito, è puramente a scopo illustrativo di questo problema. Speriamo che questo non confonda il problema.interruzioni default_scope (aggiornamento | elimina | distruggi) _all in alcuni casi
Dato che ho un modello Post e un modello di commento. Pubblica has_many Comments e Comment appartiene_al post.
Con un default_scope impostato sul modello Post, definendo le relazioni joins() e where(). In questo caso, dove() dipende da joins().
Normalmente i post non dipendono dai commenti. Ancora una volta, voglio solo dare un semplice esempio. Questo potrebbe essere in ogni caso quando where() dipende da joins().
class Post < ActiveRecord::Base
has_many :comments, :dependent => :destroy
default_scope joins(:comments).where("comments.id < 999")
end
class Comment < ActiveRecord::Base
belongs_to :post, :counter_cache => true
end
eseguendo il comando seguente:
Post.update_all(:title => Time.now)
Produce la seguente query, e, infine, getta ActiveRecord :: StatementInvalid:
UPDATE `posts` SET `title` = '2010-10-15 15:59:27' WHERE (comments.id < 999)
Anche in questo caso, update_all, delete_all, destroy_all comportarsi allo stesso modo . Ho scoperto questo comportamento quando la mia richiesta si è lamentata quando ho provato ad aggiornare il counter_cache. Che alla fine scava in update_all.
Hey Ben, hai aperto un problema a riguardo? –