0

我在多态关联方面遇到了麻烦,此时我不知道是否应该使用此关联来完成我想要完成的任务:

我有三个模型: PostProjectPhoto

我希望能够将Photo记录与 aPostProject记录相关联。如果我有 aPhoto与 a 相关联Project,然后我尝试将其与 a 关联Post,它会从那消失Poject,但成功地附加到那Post

我应该这样做:

Post
has_one :photo

Project 
has_one :photo

Photo
belongs_to :post
belongs_to :project
4

3 回答 3

2

您所描述的不是常规的多态关联(它允许动态关联的父级,但只有一个)。您似乎需要一对多的多态关联,或者只是在照片模型上同时拥有project_id和。post_id

我相信后一种选择更好,除非您绝对知道您需要将照片与更多模型相关联。

如果您仍然想使用 many_polymorphic 方法:这里是一个很好的示例 设置多态 has_many :through 关系

于 2013-09-04T00:43:13.410 回答
1

如果您想同时将照片与帖子和项目相关联,您可以这样声明关系:

Post
  has_one :photo

Project 
  has_one :photo

Photo
  belongs_to :post
  belongs_to :project

您需要添加的是:dependent => :nullify将相关记录的外键值更新为 NULL 这个已删除对象(项目或帖子),这样您has_one :photo就变成了:

 Post
  has_one :photo, :dependent => :nullify

 Project 
  has_one :photo, :dependent => :nullify

请记住,您的照片表需要引用您的项目和帖子的post_idproject_id属性。

只是为了完整性,如果您想在您的帖子/项目被销毁时销毁照片,请使用 :dependent => :destroy,如果您不添加任何仍然引用的外键,这根本不是一个好主意。

有关 has_one 关联检查文档的更多详细信息:http: //apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_one

希望对你有帮助

于 2013-09-04T00:35:58.283 回答
0
class Post
  has_one :photo, as: :photoable
end

class Project
  has_one :photo, as: :photoable
end

class Photo
  belongs_to :photoable, polymorphic: true
end

http://guides.rubyonrails.org/association_basics.html(查看第 2.9 节关于多态关联)

于 2013-09-03T23:37:19.477 回答