我有这个:
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做一些操作,但我知道这意味着各种巧妙的技巧。理论上我可以将所有剧集数据放入连续剧(非规范化),然后在需要时将其分组。
如果我有很多需要查询的剧集,这会是个坏主意吗?
感谢
答案 0 :(得分:0)
这实际上取决于您在此应用程序中需要的规模。如果该应用程序不需要服务吨和吨的人,那么去吧。如果您从活动记录关联中获得了很多好处,那么请继续使用它们。随着您的应用程序扩展,您可能会发现自己使用更直接的方法替换关联使用的特定实例来处理您的流量负载。
答案 1 :(得分:0)
我不打扰非规范化。
如果您需要查看计数,可以查看关系上的counter_cache以保存查询。
外键上有适当的索引吗?如果是这样,从一个额外的连接中提取数据应该不是那么重要,但是您可能需要下拉到SQL以在一个查询中获得所有结果而无需迭代.serials:
User.serials.collect { |s| s.episodes }.uniq # ack! this could be bad