2010-04-22 31 views
4

我有这样的:我应该否定has_many has_many?

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一些操作,但我知道这将意味着各种聪明的把戏。理论上我可以将所有的情节数据串入(denormalize),然后在需要时将group_by Site。

如果我有很多剧集需要查询,这是不是一个好主意?

谢谢

回答

0

我不会打扰denormalizing。

如果您需要查看计数,您可以检查关系counter_cache以保存查询。

你的外键是否有适当的索引?如果是这样,从一个额外的加入拉低数据不应该是什么大不了的事是,但你可能需要下降到SQL获得在一个查询所有的结果,而迭代.serials:

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

这真的取决于你需要的规模,在这个应用程序。如果应用程序不需要服务吨和吨人,然后去做。如果您从活动记录关联中获得很多好处,请继续使用它们。随着应用程序的扩展,您可能会发现自己正在用一种更直接的方法替换关联使用的特定实例,以处理流量负载。