2010-11-17 196 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. 該插件可以直接使用並完成工作。