rails loop不会创建第一个表单

时间:2018-01-18 17:12:51

标签: ruby-on-rails ruby forms

我有一个循环,它遍历一个对象数组,为每个对象创建一个表单。

%h4
- @build.tables.where(build: @build, style: "raw").each do |table|
      = form_for :table, :url => table_global_timestamp_path(table), :method => :post, :html => { :class => ""}, authenticity_token: true, remote: true do |f|
        .row.puffer
          .col-lg-12
            = f.label :global_timestamp, "Choose Timestamp for #{table.collection_document_group}"
          .col-lg-8
            - global_timestamps = table.target_collection.data_types.map{ |key, value| key if value == "TimeStamp" && table.doc_group_columns.keys.include?(key) }.compact rescue []
            = f.select(:global_timestamp, global_timestamps, :selected => table.global_timestamp, :include_blank => true, :class => "input-highlight")
          .col-lg-4
            = f.submit "Save", :class => "btn btn-primary form-control"

无论我迭代的数组的长度如何,第一次迭代似乎都不起作用。所有其他迭代都按预期创建表单。如果我的数组中有3个对象,我的html看起来像这样

%h4
<div class="row puffer">
<form></form>
<form></form>

所以它成功创建了除第一个之外的所有表单。提前致谢

1 个答案:

答案 0 :(得分:0)

将代码的第一部分更改为

= form_for table...

作为变量而不是:symbol

同样根据我的评论,您不需要build: @build,这是通过@build.tables确定范围的重点

- @build.tables.where(style: "raw").each do |table|
  = form_for table, :url => table_global_timestamp_path(table), :method => :post, :html => { :class => ""}, authenticity_token: true, remote: true do |f|