如何在Rails中管理3个多对多模型

时间:2010-08-25 17:16:30

标签: ruby-on-rails activerecord

我正在关注Railscast建议使用不同的模型来维持many-to-many关系。但是,我无法提取传递关系数据。

想象一下,有3个模型具有多对多:User <-> Color <-> Shades

我又制作了两个型号:

ColorLiking (maintains User <-> Color), DiffShades (maintains Color <-> Shades)

问题 现在,如果一切设置正确...如何找到属于Shades的{​​{1}}?

我将如何设置这种关系?

User

以上似乎不起作用......

使用SQL可以使用以下查询:

class User < ActiveRecord::Base
   has_many :shades, :through=>:diffShades, :source => :color
end

1 个答案:

答案 0 :(得分:0)

这是航空代码,可能至少部分错误,但可能对您进行富有成效的调查非常有用。

长话短说,ActiveRecord不会让你一直到User.shades方法只是w /各种:has和:属于调用。但是编写自己的模型方法来做到这一点并不太可怕。

class User < ActiveRecord::Base
   has_many :color_likings
   has_many :colors, :through => :color_likings

   def get_shades
     colors.collect {|c| c.shades.to_a}.flatten
   end
end

class ColorLiking < ActiveRecord::Base
  belongs_to :user
  belongs_to :color
end

class Color
  has_many :color_likings
  has_many :users, :through => :color_likings  
end

class DiffShade
  belongs_to :color
  belongs_to :shade
end

class Shade
  has_many :diff_shades
  has_many :colors, :through => :diff_shades
end