我有以下模型设置:
User
- has_many File (for userpics)
Gallery
- has_many File (for images)
Page
- has_one File (for background image)
Page对象可以与一个或多个Gallery对象共享一个File对象作为其背景。在某个阶段后来又出现了像
这样的新模型Product
- has_many File
或类似内容可以出现在App。
中请注意,我需要一个File模型而不是仅存储实际文件的路径,因为File模型实际上可以引用文件系统中的几个文件
File
- id
- path
- path_poster
- path_m4v (HTML5 videos need up to three files for compatibility)
- path_webm
- path_ogv
- width
- height
- poster_width
- poster_height
- type
- ... etc....
那么,是否有一种简单的方法(不覆盖整个ORM类)来实现将使用带有以下字段的“通用”数据透视表的关系:
model_name VARCHAR(8) (or model_type_id TINYINT for speed)
model_id INT
file_id INT
relation_name VARCHAR(8) (e.g., Page model can have "background" and "logo" relation)
position INT
原因:我希望有一个通用的App模块来检查“孤立”文件,并且还能够告诉每个文件的附加内容,例如,当从Gallery中删除文件时App会警告该文件仍作为背景附加到页面。
答案 0 :(得分:0)
简短的回答是否定的。原因是因为model_id会与其他模型ID冲突。如果需要,可以在model_name + model_id上执行唯一索引,但是要连接这两列,需要重写ORM方法以通过关系将模型连接在一起。
我会诚实地坚持使用简单的数据透视表。