Я только что обновил Rails 5.0 до 5.2, и один из используемых обратных вызовов, похоже, ограничивает запросы исходными идентификаторами запросов.Это мешает мне пересчитать совокупную статистику.Как я могу запретить обратные вызовы?
Например, скажем, у меня есть следующие модели:
class Area < ActiveRecord::Base
has_many :posts,
through :area_posts
def count_area_posts
byebug
# some unrelated stuff
end
end
class Post < ActiveRecord::Base
has_many :areas,
through :area_posts
end
class AreaPost < ActiveRecord::Base
belongs_to :post
belongs_to :area
after_commit :update_area_status
def update_area_status
self.area.count_area_posts
end
end
Если я достигну точки останова в Area.count_area_posts
, запустив AreaPost.where(id: 5).update(unrelated_thing: 10)
, любойзапросы по модели AreaPost
имеют дополнительное предложение WHERE
, которое я не включил явно:
15: def count_area_posts
16: byebug
=> 17: # some unrelated stuff
18: end
19:end
(byebug) AreaPost.count
(15.3ms) SELECT COUNT(*) FROM "area_posts" WHERE "area_posts"."id" = $1 [["id", 5]]
1
(byebug)
Однако, если я обновлю каждый AreaPost
по одному:
@post.area_posts.each do |area_post|
area_post.update_attribute(unrelated_thing: 10) # this works as expected. AreaPost.count inside the callback is not scoped by id
end
Запрос AreaPost.count
не ограничен идентификатором:
15: def count_area_posts
16: byebug
=> 17: # some unrelated stuff
18: end
19:end
(byebug) AreaPost.count
(15.3ms) SELECT COUNT(*) FROM "area_posts"
182253
(byebug)
Почему он фильтруется по идентификатору, когда я не передал идентификатор в запрос count
?Как я могу запретить обратный вызов для этого идентификатора?