Rails - сильные параметры - столбец строкового массива - форма

Массив строк в форме и контроллере

Я использую Rails 5 и Ruby 2.3.1

У меня возникли проблемы с выяснением того, как форма позволяет мне добавлять строки в массив в одной из моих моделей с одним полем ввода для каждого элемента в массиве. Для обновления существующей записи я бы хотел, чтобы для каждого элемента в массиве в то время присутствовало отдельное поле ввода.

Я хотел бы, чтобы форма для новой записи позволяла мне добавлять один или несколько элементов в этот массив, используя отдельное поле ввода для каждого элемента, который я решил добавить.

Как бы я это сделал? Я могу обрабатывать добавление входных данных с помощью jquery, но я не знаю, как использовать класс построителя форм rails для этого.

Этот столбец представляет собой просто массив строк.

Вот что сейчас НЕ работает:

<!-- _form.html.erb -->
...
  <%= f.label :details %>
  <% @project.details&.each do |detail| %>
      <%= f.text_field :details, 
                       name: 'details[]', 
                       class: 'form-control', 
                       value: detail %>
  <% end %>
...

Вот что у меня есть в моем контроллере:

...
private

  def thing_params
    params.require(:thing).permit(..., details: [])
  end
...

В этот момент, если я прерву действие создания контроллера и проверю параметры, объект params[:details] будет иметь то, что я ожидал (массив строк). Однако, если я просто распечатаю params, permitted будет ложным, а если я распечатаю thing_params, details не будет включено в хэш.

Кто-нибудь видит, что я делаю неправильно?

Я также подозреваю, что использование name: 'details[]' неправильно в форме, и у меня есть ощущение, что только последний придет, если я зайду так далеко...


person Jake Smith    schedule 30.10.2016    source источник


Ответы (1)


Разве вам не нравится пытаться решить проблему весь день, тратя кучу времени на написание вопроса о stackoverflow после того, как вы выбросите полотенце, только чтобы понять это через 5 минут? Я уверен.

Что нужно было изменить, так это то, что я вставил в форму:

<!-- _form.html.erb -->
...
  <%= f.label :details %>
  <% @project.details&.each do |detail| %>
      <%= f.text_field :details, 
                       # name: 'details[]', (this is what I had before)
                       name: 'thing[details][]', 
                       class: 'form-control', 
                       value: detail %>
  <% end %>
...
person Jake Smith    schedule 30.10.2016