Belongs_to和Has_one在同一个模型中

时间:2013-05-20 19:04:35

标签: ruby-on-rails

我有两个模特:摄影师和图片。摄影师有几张照片,一张照片属于摄影师。因此,模特摄影师我实施了政策has_many:图片和模型图片belongs_to:摄影师。

就在这里。但是,摄影师可以选择一张照片作为您个人资料的封面。所以,我将字段cover_id添加到表中并指出模型摄影师belongs_to:cover,class_name:“Image”。我的问题是如何在另一端显示这种关系,模型图片,已经与belongs_to:摄影师有关系。

以为我会添加一个图片字段,表明情况就是这样,但是,这个解决方案不仅可以为同一位摄影师提供封面。

补充问题,我应该在Rails中强制指定关系的两端吗?

韩国社交协会

1 个答案:

答案 0 :(得分:4)

我首先会争辩说(个人资料)图片并不拥有摄影师。相反,摄影师应该有一张个人资料照片。并且这种类型的对象也可以扮演摄影师所拥有的图片的角色,但是用于除了个人资料照片之外的目的。我认为STI很有意义。

class Photographer < ActiveRecord::Base
  has_many :pictures
  has_one :profile_picture
end

class Picture < ActiveRecord::Base
  belongs_to :photographer
end

class ProfilePicture < Picture
  belongs_to :photographer
end

通过这种方式,您可以为摄影师分配一张个人资料图片,并使用相同的数据库表格为两个相似的模型创建许多图片。

photographer = Photographer.create!
profile_picture = ProfilePicture.create!

photographer.profile_picture = profile_picture
photographer.save!

photographer.pictures.create!    
photographer.pictures.create!
photographer.pictures.count #=> 3