Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 嵌套上载文件的多个实例-需要此设计方面的帮助_Ruby On Rails_File_Model_Nested_Uploader - Fatal编程技术网

Ruby on rails 嵌套上载文件的多个实例-需要此设计方面的帮助

Ruby on rails 嵌套上载文件的多个实例-需要此设计方面的帮助,ruby-on-rails,file,model,nested,uploader,Ruby On Rails,File,Model,Nested,Uploader,在这件事上我一直在兜圈子 我有一份工作,这份工作有多个任务。每个任务有一个输入文件和一个输出文件。一个文件有一个模型。一个输入文件可用于多个任务。每个任务都有一个输出文件。(我正在使用jQuery上传文件。) 理想情况下,我想要一个Job->Task->File的嵌套关系,但是唯一的关系是每个任务一个输入文件和一个输出文件,因此从逻辑上讲,任务在模型中有两个if File_id,并且任务属于每个文件,但是嵌套是向后的,并且标准表单关系都不起作用 我已经研究了has_one_through和多态性

在这件事上我一直在兜圈子

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

理想情况下,我想要一个Job->Task->File的嵌套关系,但是唯一的关系是每个任务一个输入文件和一个输出文件,因此从逻辑上讲,任务在模型中有两个if File_id,并且任务属于每个文件,但是嵌套是向后的,并且标准表单关系都不起作用

我已经研究了has_one_through和多态性的连接模型,但没有一个完全符合。在服务于多个任务的单个输入文件和任务中两个角色引用的文件模型之间,我还没有找到一个明显的解决方案

建议

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

我在很多方面都使用Cocoon,但是在这里,在作业表单上,文件上传(使用jQuery上传)创建一个新文件并构建其父文件,一个任务,所有这些都在文件控制器的创建部分,然后通过javascript将它们添加到表单中


试图澄清的是,文件是两个角色(输入或输出)之一的任务的子级。一个文件也可以是上面未提到的几个其他模型的子文件。如果一个文件总是只有一个父文件的子文件,那么多态性将是一个很好的解决方案。导致问题的原因是,在一个实例(任务的输入)中,一个文件可能作为多个父级(任务)的子级。正如pixelearth所指出的,这将需要一个联接表。也许,由于“任务输入”是唯一的多个案例,我应该用一个连接(has_many:through)实现这个案例,并对其余部分使用多态性。我希望有一个单一的解决方案,文件中既没有很多联接表,也没有很多外键。

如果您的输入文件可以用于多个任务,那么您将需要一个联接模型(和表),并且必须使用has_one:through。如果输出文件也可以属于多个任务,则需要使用has_many:through,或者将两者定义为has_one:(output | input)_file:through和what构成what类型的作用域using:conditions


如果连接模型可以涉及多个任务,那么就没有办法使用连接模型。文件不能只有任务id,因为会有多个任务。如果它可能属于的任务数量有限制,那么您可以使用多个字段task\u 1\u id、task\u 2\u id等。但这将是一个令人讨厌的问题。

我不确定您到底想要实现什么。但我知道当涉及到嵌套形式时,它是很棒的。它也有一些很好的例子。还可以通过查看嵌套的形式片段来获得透视图。但是cocoon gem做得很好