Размещайте несколько полей ввода в Rails как список, а не с отдельными именами. - PullRequest
0 голосов
/ 04 июля 2018

Я хотел бы отправить список контроллеру с form_for. Этот список должен быть заполнен text_field s.

Эта реализация отправит :some_list со значением только одного текстового поля в списке (как и ожидалось). Я хочу, чтобы количество X text_field s было представлено в виде списка, поскольку число текстовых полей является динамическим, чтобы получить что-то вроде: 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 голосов
/ 04 июля 2018

Вы можете использовать text_field_tag, как это,

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

Это своего рода взлом, Приемлемый ответ - подходящее решение.

0 голосов
/ 04 июля 2018

Добавить multiple: true с именем текстового поля.

<%= 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 %>
...