Rails:两个相同模型的多个“has_many through”?

时间:2010-03-30 02:34:46

标签: ruby-on-rails associations

无法绕过这个......

class User < ActiveRecord::Base
  has_many :fantasies, :through => :fantasizings
  has_many :fantasizings, :dependent => :destroy
end

class Fantasy < ActiveRecord::Base
  has_many :users, :through => :fantasizings
  has_many :fantasizings, :dependent => :destroy
end

class Fantasizing < ActiveRecord::Base
  belongs_to :user
  belongs_to :fantasy
end

...这对我的主要关系很好,因为User 很多Fantasies,而Fantasy 1}}可以 属于 到许多Users

但是,我需要为 liking 添加另一种关系(例如,User“赞”a Fantasy而不是“ “它...想想Facebook以及你如何”喜欢“一个墙贴,即使它不属于你......事实上,Facebook的例子几乎就是我的目标)

我认为我应该建立另一种关联,但我对如何使用它或者如果这是正确的方法感到困惑。我开始添加以下内容:

class Fantasy < ActiveRecord::Base

  ...

  has_many :users, :through => :approvals
  has_many :approvals, :dependent => :destroy
end

class User < ActiveRecord::Base

  ...

  has_many :fantasies, :through => :approvals
  has_many :approvals, :dependent => :destroy
end

class Approval < ActiveRecord::Base
  belongs_to :user
  belongs_to :fantasy
end

...但如何通过Approval而不是Fantasizing创建关联?

如果有人能让我直截了当,我会非常感激!

1 个答案:

答案 0 :(得分:2)

保留第一组代码,然后在用户模型中添加:

has_many :approved_fantasies, :through => :fantasizings, :source => :fantasy, :conditions => "fantasizings.is_approved = 1"

在Fantasizing表中,添加一个is_approved布尔字段。