对于以下情况,我很难围绕必要的关联来思考:
我有一个“上传”,可以附加到“人”、“组”、“项目”或“办公室”。
一个上传需要同时属于多个人、组或项目(即:可以链接到两个人、三个项目、一个组、两个办公室。)
一个人、一个项目、一个组或一个项目可以有多个与之关联的上传。
我希望能够获取与对象关联的所有上传(例如:@project.uploads),以及上传链接到的所有项目(在单一方法中,例如@upload.linked_to)
我试图避免为每个可能的关联(projects_uploads、people_uploads、office_uploads)创建一个表,因为我希望它更灵活,因为将来我可能希望将上传链接到其他模型。
多态关联可能是我需要的......但我还没有找到一个与我想要完成的例子非常相似的例子。
有人可以指出我正确的方向吗?
谢谢!如有必要,我可以尝试澄清我的问题:)
编辑: 解决了!这就是我最终设置它的方式:
楷模
上传.rb
class Upload < ActiveRecord::Base
has_many :upload_connections
def linked # Shortcut for @upload.upload_connections
self.upload_connections
end
end
上传连接.rb
class UploadConnection < ActiveRecord::Base
belongs_to :uploadable, :polymorphic => true
belongs_to :upload
end
Project.rb / Office.rb / Person.rb 等
class Project < ActiveRecord::Base
# (same for project, office, person, etc.)
has_many :upload_connections, :as => :uploadable
has_many :uploads, :through => :upload_connections
end
表结构
上传
id: integer
filename: string
description: string
上传连接
id: integer
uploadable_id: integer
uploadable_type: string
upload_id: integer
...加上您想要关联的任何对象的表格。