Я считаю, что это ошибка в Rails 3. Я надеюсь, что кто-то здесь может направить меня в правильном направлении.Код, размещенный ниже, предназначен исключительно для иллюстрации этой проблемы.Надеюсь, это не запутает проблему.
Учитывая, что у меня есть модель Post и модель Comment.Post has_many Comments, а Comment принадлежит_ Post.
С установленным по умолчанию параметром_области для модели Post, определяющим отношения joins () и where ().В этом случае, где () зависит от joins ().
Обычно сообщения не будут зависеть от комментариев.Опять же, я просто хочу привести простой пример.Это может быть любой случай, когда where () зависит от 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
Выполнение следующей команды:
Post.update_all(:title => Time.now)
Создает следующий запрос и, в конечном итоге, выдает ActiveRecord ::StatementInvalid:
UPDATE `posts` SET `title` = '2010-10-15 15:59:27' WHERE (comments.id < 999)
Опять, update_all, delete_all, destroy_all ведут себя одинаково.Я обнаружил такое поведение, когда мое приложение жаловалось при попытке обновить counter_cache.Что в конечном итоге приводит к update_all.