嵌套上传文件的多个实例 - 需要有关此设计的帮助

时间:2014-06-30 21:23:57

标签: ruby-on-rails file model nested uploader

我一直在围着这个圈子去看看。

我有一份工作,而且工作有多项任务。每个任务都有一个输入文件和一个输出文件。文件有一个模型。输入文件可用于多个任务。每个任务都有一个输出文件。 (我使用jQuery上传文件。)

理想情况下,我想要一个嵌套的Job关系 - >任务 - >文件,但是唯一关系是一个输入文件和一个输出文件每个任务,所以逻辑上,如果模型中的File_ids和任务属于每个文件,则任务有一对,但是嵌套是向后的,没有标准的表单关系工作

我已经看过使用has_one_through和多态的联接模型,但没有什么能排成一行。在提供多个任务的单个输入文件和任务中的两个角色中引用的文件模型之间,我还没有找到一个明显的解决方案。

建议???

-----------附录----------

我使用Cocoon做很多事情,但是在这里,在Job表单上,文件上传(使用jQuery Upload)创建一个新文件并在File控制器的create部分中构建其父,一个Task,然后添加他们通过javascript到表单。

试图澄清,文件是两个角色(输入或输出)之一的任务的子代。文件也可以是上面未提到的其他几种模型的子代。如果文件始终只是父母的一个孩子,那么多态将是一个很好的解决方案。导致问题的原因是,在一个实例(任务的输入)中,一个文件可以作为多个父项的子项(任务)。正如pixelearth所指出的,这需要是一个连接表。也许,因为'任务输入'是唯一的多重情况,我应该用连接(has_many:through)实现这个,并使用多态来完成剩下的工作。我希望在File中没有很多连接表或许多外键的单一解决方案。

1 个答案:

答案 0 :(得分:0)

如果您的输入文件可以用于多个任务,那么您将需要一个连接模型(和表),并且您将必须使用has_one:through。如果输出文件也可以属于许多任务,那么你需要使用has_many:through,或者将它们定义为has_one :(输出|输入)_file:through以及使用的条件构成一个类型:conditions

如果它们可以与多个任务相关,则无法使用连接模型。一个文件不能只有一个task_id,因为会有多个任务。如果它可能属于的任务数量有限制,那么你可以使用多个字段task_1_id,task_2_id等。但这可能是令人厌恶的。