Ruby on Rails中的真实数据连接表

时间:2013-12-16 19:09:37

标签: ruby-on-rails save jointable

在我们的RoR应用程序中,我们有两个核心模型和一个连接表:

class Workflow < ActiveRecord::Base
  has_many :workflow_datafiles
  has_many :datafiles, :through => :workflow_datafiles

class Datafile < ActiveRecord::Base
  has_many :workflow_datafiles
  has_many :workflows, :through => :workflow_datafiles

class WorkflowDatafile < ActiveRecord::Base
  belongs_to :datafile
  belongs_to :workflow

连接表有自己的模型代码,并包含一个实际数据元素,用于描述给定工作流和数据文件之间关系的性质。我编写了从XML文件导入数据的代码,在关联导入的文件和工作流之后,我需要将一些数据放入连接行。问题是,即使未保存的工作流对象具有数据文件数组,而未保存的数据文件对象具有工作流数组,也没有workflow_datafile数组。我认为它们会在我保存后出现(我应该验证这一点,我猜)。

因此,当我处理XML文件,实例化工作流和数据文件对象,并将它们添加到彼此的集合中时,我没有很好的方法来访问它们的连接对象。

我看到两个选项:

  1. 此时我可以保存工作流和数据文件对象,以强制Rails将它们和连接行写入数据库。据推测,这将填充.workflow_datafiles数组,或者至少让我在数据库中直接查询和更新我需要的行。这个问题是这两个对象都是更大的XML结构的一部分,现在代码在加载完所有内容后执行所有验证,然后立即保存所有内容。这会使该逻辑短路,并留下我创建大型项目不在数据库中的工作流和/或数据文件(以及连接行)的可能性。
  2. 我可以将代码放在XML处理的更高级别,以便在保存整个事物之后检查已加载数据的工作流,这些工作流与数据文件相关联,并在那时对它们进行一些额外的处理以填充连接表列。这对我的代码进行了一些结构性的改变,并重新审视了我已经为后期处理保存的结构,但至少它不会冒险在表中创建孤立的行。
  3. 我倾向于选择2,但我真的希望有人有更好的选择,或者至少对整体情况有一些了解。

0 个答案:

没有答案