我有这个:

class User < ActiveRecord::Base
  has_many :serials
  has_many :sites, :through => :series
end

class Serial < ActiveRecord::Base
  belongs_to :user
  belongs_to :site
  has_many :episodes
end

class Site < ActiveRecord::Base
  has_many :serials
  has_many :users, :through => :serials
end

class Episode < ActiveRecord::Base
  belongs_to :serial
end

我想对User.serials.episodes进行一些操作,但是我知道这将意味着各种巧妙的技巧。从理论上讲,我可以将所有情节数据放入序列中(反规范化),然后在需要时放入group_by Site。

如果我需要查询很多剧集,这将是一个坏主意吗?

谢谢

最佳答案

我不会打扰正常化。

如果需要查看计数,则可以在关系上签出counter_cache来保存查询。

您的外键上是否有适当的索引?如果是这样,那么从一个额外的联接中拉取数据没什么大不了的,但是您可能需要下降到SQL才能在不迭代.serials的情况下在一个查询中获得所有结果:

User.serials.collect { |s| s.episodes }.uniq  # ack! this could be bad

10-08 07:34