我有这个:
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