2010-11-17 109 views
2

我的设置如下::用的has_many关系通过

class User < ActiveRecord::Base 
    has_many :owners, :dependent => :destroy 
    has_many :properties, :through => :owners 
end 

class Owner < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :property 
end 

class Property < ActiveRecord::Base 
    has_many :owners, :dependent => :destroy 
    has_many :users, :through => :owners 
    has_many :datafiles, :dependent => :destroy 
end 

class Datafile < ActiveRecord::Base 
    belongs_to :property 
end 

现在我希望能够做到@ user.datafiles。 我试过has_many :datafiles, :through => :properties, :source => :datafiles,但似乎有一个问题:通过已经去了一个:通过。那么,我将如何去尝试和管理我在这里要做的事情?

预先感谢您。

回答

0

如何像:

#user.rb 

def datafiles 
    Property.find(:all, :joins => :owners, :conditions => ['owners.user_id = self.id'], :include => :datafile).collect(&:datafile) 
+0

这是行不通的。问题是属性没有user_id,因为一个属性可以有很多用户。这就是所有者表格的用途。物业has_many:用户,:通过=>:业主 – 2010-11-17 09:51:04

+0

对不起,为集中起见太早。 :)编辑如何? – mark 2010-11-17 10:21:05

1

2的方法;

1>

class User < AR 
    has_many :owners, :dependent => :destroy 
    has_many :properties, :through => :owners 
    has_many datafiles 
end 

class Datafile < AR 
    belongs_to :user 
    belongs_to :property 
end 

你user.datafiles的要求应与此得到满足。

如果你想要一个嵌套的has_many通过,你需要使用第二种方法的插件。

2> 你可以找到它here. 该插件可以直接使用并完成工作。