【问题标题】:How to generate multiple text fields for nested attributes in Rails如何在 Rails 中为嵌套属性生成多个文本字段
【发布时间】:2021-03-12 13:45:51
【问题描述】:

我有以下问题:

我想在一个表单中生成多个文本字段,这样我最后得到如下结果:

[
  {foo: 0},
  {foo: 1},
  {foo: 10},
  {foo: 11},
  {foo: 100}
]

在我的表单中,我编写了以下代码:

<%= f.fields_for(:foo_associates, @bar.foo_associates) do |ff| %>
  <%= ff.text_field(:maincompany_id) %>
  <%= ff.text_field(:maincompany_id) %>
  <%= ff.text_field(:maincompany_id) %>
  <%= ff.text_field(:maincompany_id) %>
  <%= ff.text_field(:maincompany_id) %>
<% end %>

所以渲染出来的 HTML 应该是这样的:

<input name="company[foo_associates_attributes][0][foo]" />
<input name="company[foo_associates_attributes][1][foo]" />
<input name="company[foo_associates_attributes][2][foo]" />
<input name="company[foo_associates_attributes][3][foo]" />
<input name="company[foo_associates_attributes][4][foo]" />

但它看起来像这样:

<input name="company[foo_associates_attributes][0][foo]" />
<input name="company[foo_associates_attributes][0][foo]" />
<input name="company[foo_associates_attributes][0][foo]" />
<input name="company[foo_associates_attributes][0][foo]" />
<input name="company[foo_associates_attributes][0][foo]" />

我的结果是这样的:

[
  {foo: 0}
]

我做错了什么? 感谢所有答案。

【问题讨论】:

    标签: ruby-on-rails ruby forms ruby-on-rails-6


    【解决方案1】:

    在你的控制器中

    #new
    
    5.times {@bar.foo_associates.build}
    

    形式

    <%= f.fields_for(:foo_associates) do |ff| %>
      <%= ff.text_field(:foo) %>
    <% end %>
    

    【讨论】:

    • 我也推荐茧宝石。它将允许在表单中动态建立关系。 github.com/nathanvda/cocoon。所以你可以从 1 开始,或者像 @dileepnandanam 所说的那样建立关联,然后你可以使用 gem 来添加 3、4、5 等。
    • 但是当以这种方式进行时,我只能将固定数量的 foo_associates 与@bar 关联?
    • 是的@Daniel,刚刚发布了纠正基本错误的答案。你必须使用github.com/nathanvda/cocoon
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    相关资源
    最近更新 更多