Ruby on rails DynamicCall在rails中创建带有复选框的表作为表单的一部分
我需要创建一个表单,用户可以上传多个文件,然后在发送文件之前检查某些属性。每个文件输入字段应显示在表格中,以及每个文件输入字段的复选框 然而,我不知道表中有多少条目。这取决于某个文件夹中的文件数,并且会发生变化 因此,我必须创建表和表单的代码是:Ruby on rails DynamicCall在rails中创建带有复选框的表作为表单的一部分,ruby-on-rails,forms,checkbox,Ruby On Rails,Forms,Checkbox,我需要创建一个表单,用户可以上传多个文件,然后在发送文件之前检查某些属性。每个文件输入字段应显示在表格中,以及每个文件输入字段的复选框 然而,我不知道表中有多少条目。这取决于某个文件夹中的文件数,并且会发生变化 因此,我必须创建表和表单的代码是: <% counter = 0 %> <%= simple_form_for(@myResource, :as => :myResource, :html => {:multipart => true}) do |f|
<% counter = 0 %>
<%= simple_form_for(@myResource, :as => :myResource, :html => {:multipart => true}) do |f| %>
<table>
<% @filesInFolder.each do |file| %>
<tr>
<td>
<%= // Need checkboxes here %>
</td>
</tr>
<% counter = counter+1 %>
<% end %>
</table>
<% end %>
我需要根据我创建的数量给它们动态名称,这样我就可以使用“check\u box\u tag”了
check_box_tag "checkBox#{counter}"
那么,我如何制作复选框,使其可以通过窗体的控制器轻松访问,同时创建所需数量的复选框并动态命名它们呢
编辑:为了澄清,@fileInFolder是文件名的集合,但不是我想要上传的文件。假设我在那个文件夹中有5个文件,那么我需要5次那个界面,这样用户就可以勾选某些选项,并将补充文件上传到文件夹中已有的文件中。
此外,上载文件将创建多个记录,但每个上载的文件一个记录,而不是每个文件夹中的文件一个记录。因此,如果我在文件夹中有5个文件,并且用户只勾选其中3个文件的复选框,我将创建3个新记录进行计数,就像您希望做的那样:
<%= simple_form_for(@myResource, :as => :myResource, :html => {:multipart => true}) do |f| %>
<table>
<% @filesInFolder.each_with_index do |file, index| %>
<tr>
<td>
<%= f.check_box "check-box-#{index}", file.whatever %>
</td>
</tr>
<% end %>
</table>
<% end %>
:myResource,:html=>{:multipart=>true})do | f |%>
当然,您的变量@filesInFolder必须是DB中的selecton,您有哪种型号?您可能需要查看嵌套表单,因为基本上您必须为每个文件创建要保存到的模型的实例化。因为向控制器发送请求不会创建一条记录,而是多条记录。这些记录本身是否与另一个模型中的一个基本记录相关?如果不更好地理解您想要实现的目标,这是一个很难回答的问题。是的,您打算如何将它们存储在数据库中,可能会使您的视图代码更容易(例如,使用嵌套表单)。但是,请澄清
@fileinfolder
-->这些文件在服务器上吗?因此,在这种情况下,用户实际上不是在“上载”文件,而是选择了已上载的文件,或者,您是否希望实际从用户的计算机读取文件夹(浏览器/javascript imho无法执行此操作,除非您使用java applet或flash)--在这种情况下:为什么不让用户上传多个文件呢?添加了Edit以澄清@fileinfolder,但它基本上是一个文件名数组,它为我提供了未定义的方法“check-box-0”,用于#O yah!很抱歉真的,若你们使用这样的构造,字段的名称必须是对你们模型中字段的引用。是的,我知道,这是我面临的问题。f.复选框
和复选框标签
(不带f.
)是否等效?不,不是。当您使用f.checkbox:field\u name时,您:field\u name是对数据库中字段的引用。并勾选复选框,只标记一个没有此引用的表单标记
<%= simple_form_for(@myResource, :as => :myResource, :html => {:multipart => true}) do |f| %>
<table>
<% @filesInFolder.each_with_index do |file, index| %>
<tr>
<td>
<%= f.check_box "check-box-#{index}", file.whatever %>
</td>
</tr>
<% end %>
</table>
<% end %>