:has_many关系:通过另一个关系:通过

时间:2010-11-17 09:11:58

标签: ruby-on-rails activerecord

我的设置如下:

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,但似乎有一个问题:通过已经进入的东西:通过。那么我将如何尝试管理我在这里要做的事情呢?

提前谢谢。

2 个答案:

答案 0 :(得分:1)

2种方法;

1&GT;

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. 该插件开箱即用并完成工作。

答案 1 :(得分:0)

如下:

#user.rb

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