Rails多个关联的最佳实践

时间:2012-11-30 05:12:17

标签: ruby-on-rails ruby-on-rails-3 associations polymorphism

我的程序中有三个模型,分层结构:

User (has_many :computers)
Computer (has_many :programs, belongs_to :user)
Programs (belongs_to :computer)

在该计划中,我需要通过扩展程序查看用户拥有的程序数量。通过User.computers.programs很容易做到这一点。

那就是说,直接在has_many/belongs_toUsers之间宣布Programs关系是否有益?是否会有任何好处(性能或其他方面),还是会增加代码的复杂性?

3 个答案:

答案 0 :(得分:1)

这在很大程度上取决于您是否预见到需要经常访问该关系。如果你没有那个特定的查询,你可以更好地使用

class User < ActiveRecord::Base
  has_many :computers
  has_many :programs, :through => :computers
end

并完成它。实现相同功能的代码更少,更容易阅读/维护。

但是,如果您要在大型数据集上访问该关系,那么您可能会在保存昂贵的JOIN的名义中对您的数据进行非规范化处理。

答案 1 :(得分:0)

through选项:

has_many :programs, through: :computers

您可以在此处详细了解: http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association

答案 2 :(得分:0)

你可以这样做:

class User < ActiveRecord::Base
  has_many :computers
  has_many :programs, :through => :computers
end

你可以这样做:

user = User.first #find some user
user.programs #get a list of programs from the user through the computers they own