多态关联和/或has_many通过

时间:2012-11-19 16:42:58

标签: ruby-on-rails ruby ruby-on-rails-3

我需要在用户,产品和照片模型之间建立关系。用户可以将照片添加到产品中。因此,用户has_many张照片和产品has_many张照片,但每张照片belongs_to都是产品和用户。我怎样才能在Rails中实现这一目标?据我所知,多态关联只允许照片属于产品或用户。我是否必须为用户照片和产品图片关系使用单独的has_many_through关系?

1 个答案:

答案 0 :(得分:2)

您可以在同一模型中拥有多个belongs_to属性。基本上,标记为belongs_to的模型将持有已标记为has_many的模型的外键。

class MyModel < ActiveRecord::Base

  belongs_to :other_model1
  belongs_to :other_model2

end

如果你想使用下面提到的多态关联,你可以沿着这些行

class Photos < ActiveRecord::Base
  belongs_to :imageable, :polymorphic => true
end

class Users < ActiveRecord::Base
  has_many :photos, :as => :imageable
end

class Product < ActiveRecord::Base
  has_many :photos, :as => :imageable
end

在这种情况下,您只需添加has_many:phots,:as =&gt;即可创建关系。 :imageable属性,无需重新访问Photos类。