default_scope breaks (update | delete | destroy) _all в некоторых случаях

Я считаю, что это ошибка в Rails 3. Я надеюсь, что кто-то здесь может направить меня в правильном направлении. Код, размещенный ниже, предназначен исключительно для иллюстрации этой проблемы. Надеюсь, это не запутает проблему.

Учитывая, что у меня есть модель сообщения и модель комментария. Публикация имеет_many комментариев и комментарий принадлежит_к сообщению.

С default_scope, установленным в модели сообщения, определяя отношения joins () и where (). В этом случае 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.

9
задан Brian Tompsett - 汤莱恩 10 July 2015 в 23:37
поделиться