在Rails中将多个输入字段发布为列表,而不是使用单个名称。

时间:2018-07-04 06:35:42

标签: ruby-on-rails ruby-on-rails-4 erb form-for

我想用form_for向控制器提交一个列表。此列表应填充text_field

此实现将提交:some_list,其值只有列表中一个text_field的值(如预期)。我希望将X数量的text_field作为列表提交,因为文本字段的数量是动态的,以接收某种形式的东西:params {..."name":"Something", "some_list":["a", "b"]}或一些等效的JSON。


.erb

<%= form_for @my_model do |f|%>
  <% f.text_field :name %>

  <% (0...@some_limit).each do |index| %>
    <%= f.text_field :some_list %>
  <% end %>
<% end %>


模型

请注意,该模型不是ActiveRecord

class MyModel

  include ActiveModel::Model
  include ActiveModel::Validations

  attr_accessor :name, :some_list

  validates :name, :presence => true
  validates :some_list, :presence => true

end

2 个答案:

答案 0 :(得分:2)

添加multiple: true和text_field名称。

<%= form_for @my_model do |f|%>
  <% f.text_field :name %>

  <% (0...@some_limit).each do |index| %>
    <%= f.text_field :some_list, multiple: true %>
  <% end %>
<% end %>

答案 1 :(得分:1)

您可以像这样使用text_field_tag

<% (0...@some_limit).each do |index| %>
  <%= text_field_tag "#{f.object.class.to_s.underscore}[some_list][]" %>
<% end %>

这是一种hack,可接受的答案是适当的解决方案。