【问题标题】:Structuring a Rails association构建 Rails 关联
【发布时间】:2014-01-25 19:17:11
【问题描述】:

我应该如何构建这个 Rails 关联?

问题

所以基本上用户可以创建一个数据集,然后从中创建图表。我希望用户能够创建一个项目,并为多个项目标记数据集或图形。如果数据集标记有项目,则不应自动标记属于它的所有图(数据集)。

我有点像 Rails 协会的菜鸟。通读文档听起来我可以做这样的事情。

  1. “数据集”有_许多“图”。
  2. “项目”有_许多“数据集”和“图表”。
  3. “数据集”有_许多“项目”。
  4. “图表”有_许多“项目”。

解决方案:(正确吗?)

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

【问题讨论】:

  • 您能否澄清一下:如果您有一个项目,即使您没有标记相关数据集,您能否为其标记图表?例如:dataset1 有graph1,dataset2 有graph2。 project1 标记了 dataset1 和 graph2。
  • 是的,完全是@Chai :) 每个项目一次分配一个项目。

标签: ruby-on-rails ruby-on-rails-4 associations rails-activerecord rails-models


【解决方案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

如果您不想使用多态模型,那么您的方法似乎是正确的。

【讨论】:

  • 谢谢 Chai,但我不确定我是否看到多态性给我的当前模型带来了什么
  • 只有两种可标记类型:什么都没有 :) 也许有一天一个项目会有许多不同类型的标记... XD
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
  • 1970-01-01
相关资源
最近更新 更多