gpt4 book ai didi

ruby-on-rails - Rails,如何避免 "N + 1"查询关联中的总数(计数、大小、counter_cache)?

转载 作者:数据小太阳 更新时间:2023-10-29 06:36:48 27 4
gpt4 key购买 nike

我有这些模型:

class Children < ActiveRecord::Base
has_many :tickets
has_many :movies, through: :tickets
end


class Movie < ActiveRecord::Base
has_many :tickets
has_many :childrens, through: :tickets
belongs_to :cinema
end


class Ticket < ActiveRecord::Base
belongs_to :movie, counter_cache: true
belongs_to :children
end


class Cinema < ActiveRecord::Base
has_many :movies, dependent: :destroy
has_many :childrens, through: :movies
end

我现在需要的是在“电影院”的页面中,我想为那个电影院的电影打印 children 的总和(数量,大小?),所以我这样写:

  • 在 cinemas_controller.rb 中:

@childrens = @cinema.childrens.uniq

  • 在 cinemas/show.html.erb:

<% @childrens.each do |children| %><%= children.movies.size %><% end %>

但显然我有 bullet gem 提醒我 Counter_cache 并且我不知道把这个 counter_cache 放在哪里因为电影的不同 id。

而且在没有 counter_cache 的情况下,我所拥有的也不是我想要的,因为我想要计算该电影院中有多少 child 从该电影院许多天的门票中拿走了他们。

怎么做?

更新

如果在我看来我使用这段代码:

<% @childrens.each do |children| %>
<%= children.movies.where(cinema_id: @cinema.id).size %>
<% end %>

gem bullet 什么都不说,每个都正常工作。

但是我有一个疑问:这种查询数据库的方式是因为 View 中的代码比较重?

最佳答案

这可能对你有帮助。

@childrens_count = @cinema.childrens.joins(:movies).group("movies.children_id").count.to_a

关于ruby-on-rails - Rails,如何避免 "N + 1"查询关联中的总数(计数、大小、counter_cache)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31211063/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com