我应该如何构建这个Rails关联?
问题
因此,用户基本上可以创建数据集,然后创建数据集。我希望用户能够创建项目,并标记包含多个项目的数据集或图形。如果数据集标记有项目,则不应自动标记属于它的所有图形(数据集)。
我是一个Rails协会noob。阅读文档听起来我可以做这样的事情。
解决方案:(这是正确的吗?)
4个模型:Dataset, Graph, Project, ProjectContent
对于#1:
Dataset has_many Graphs
Graph belongs_to Dataset
对于#2:
Project has_many datasets, through: :project_content
Project has_many graphs, through: :project_content
对于#3:
Dataset has_many projects, through: project_content
对于#4:
Graph has_many projects, through: project_content
答案 0 :(得分:1)
这对我来说是“多态”,几乎是默认用例;)
标签型号:
belongs_to :taggable, :polymorphic => true
belongs_to :project
项目模型:
has_many :tags
has_many :datasets, :through => :tags, :source => :taggable, :source_type => 'Dataset'
has_many :graphs, :through => :tags, :source => :taggable, :source_type => 'Graph'
图表模型:
belongs_to :dataset
has_many :tags, :dependent => :destroy
has_many :projects, :as => :taggable
数据集模型:
has_many :graphs
has_many :tags, :dependent => :destroy
has_many :projects, :as => :taggable
如果您不想使用多态模型,那么您的方法似乎是正确的。