Ruby on rails RubyonRails连接表中的真实数据

Ruby on rails RubyonRails连接表中的真实数据,ruby-on-rails,save,jointable,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, :

在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
类工作流:工作流\u数据文件
类数据文件:工作流\u数据文件
类WorkflowDatafile
联接表有自己的模型代码,并包含一个实际的数据元素,该数据元素描述给定工作流和数据文件之间关系的性质。我已经编写了从XML文件导入数据的代码,在关联导入的文件和工作流之后,我需要将一些数据放入联接行。问题是,即使未保存的工作流对象有一个数据文件数组,而未保存的数据文件对象有一个工作流数组,也没有一个工作流\数据文件数组。我想它们在我保存后出现(我想我应该验证一下)

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

我看到两种选择:

  • 此时,我可以保存工作流和数据文件对象,以强制Rails将它们及其连接行写入数据库。据推测,这将填充.workflow_数据文件数组,或者至少让我直接在数据库中查询和更新所需的行。问题是,这两个对象都是更大的XML结构的一部分,现在代码在加载所有内容后执行所有验证,然后一次保存所有内容。这将缩短这种逻辑,并使我有可能创建其较大项目不在数据库中的工作流和/或数据文件(和连接行)
  • 我可以将代码放在XML处理的更高级别上,以便在保存整个过程后检查已加载的工作流数据,这些工作流具有与其关联的数据文件,并在此时对其进行一些额外的处理,以填充联接表列。这更像是对代码的结构性修改,并重新访问了我已保存用于后期处理的结构,但至少不会在表中创建孤立行

  • 我倾向于选择2,但我真的希望有人有更好的选择,或者至少对整个情况有一些看法。

    如果我正确理解您的问题,即您的联接表没有填充;如何从xml中构建
    工作流
    数据文件
    工作流_数据文件
    。我认为问题是存在的,因为使用正确的关系定义,所有记录都应该正确插入,并且您的关系是正确的。我认为问题是Rails在内部存储workflow_datafiles数据,但在我保存某些数据之前,不会使其可供程序使用。事实上,由于工作流和数据文件在保存之前没有id值,所以通常不会在连接行中放入太多内容。只是在我的例子中,我需要显式地访问连接行以存储真实数据。