我的程序中有三个模型,分层结构:
User (has_many :computers)
Computer (has_many :programs, belongs_to :user)
Programs (belongs_to :computer)
在该计划中,我需要通过扩展程序查看用户拥有的程序数量。通过User.computers.programs
很容易做到这一点。
那就是说,直接在has_many/belongs_to
和Users
之间宣布Programs
关系是否有益?是否会有任何好处(性能或其他方面),还是会增加代码的复杂性?
答案 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