Creo que esto es un error en Rails 3. Espero que alguien aquí pueda dirigirme en la dirección correcta. El código publicado a continuación es puramente ilustrativo de este problema. Espero que esto no confunda el problema.default_scope breaks (update | delete | destroy) _all en algunos casos
Dado que tengo un modelo de publicación y un modelo de comentario. Publicar has_many Comentarios, y Comentario pertenece_ a Publicar.
Con un default_scope establecido en el modelo Post, definiendo las relaciones joins() y where(). En este caso, donde() depende de joins().
Normalmente, las publicaciones no dependen de los comentarios. De nuevo, solo quiero dar un ejemplo simple. Esto podría ser cualquier caso cuando where() depende de 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
Ejecutar el siguiente comando:
Post.update_all(:title => Time.now)
Produce la siguiente consulta, y en última instancia tiros ActiveRecord :: StatementInvalid:
UPDATE `posts` SET `title` = '2010-10-15 15:59:27' WHERE (comments.id < 999)
Una vez más, update_all, delete_all, destroy_all se comportan de la misma manera . Descubrí este comportamiento cuando mi aplicación se quejó cuando intentaba actualizar counter_cache. Que finalmente se profundiza en update_all.
Hola, Ben, ¿abriste un problema sobre esto? –