Ruby on Rails: Представление массива в форме

У меня есть модель, которая имеет атрибут, который является Массивом. Каков надлежащий способ для меня заполнить тот атрибут от представления формы?

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

Пример для создания этого менее абстрактным:

class Article
  serialize :links, Array
end

Переменная ссылок принимает форму массив URL, т.е. [["http://www.google.com"], ["http://stackoverflow.com"]]

Когда я использую что-то как следующее в моей форме, оно создает хеш:

<%= hidden_field_tag "article[links][#{url}]", :track, :value => nil %>

Результирующий хеш похож на это:

"links" => {"http://www.google.com" => "", "http://stackoverflow.com" => ""}

Если я не включаю URL от имени ссылки, дополнительные значения ударяют друг друга:

<%= hidden_field_tag "article[links]", :track, :value => url %>

Результат похож на это: "links" => "http://stackoverflow.com"

66
задан engineersmnky 2 September 2014 в 18:49
поделиться

1 ответ

Если ваша html-форма имеет поля ввода с пустыми квадратными скобками, то они будут преобразованы в массив внутри params в контроллере.

# Eg multiple input fields all with the same name:
<input type="textbox" name="course[track_codes][]" ...>

# will become the Array 
   params["course"]["track_codes"]
# with an element for each of the input fields with the same name

Добавлено:

Обратите внимание, что помощники rails не настроены для автоматического выполнения трюка с массивом. Поэтому вам, возможно, придется создать атрибуты name вручную. Кроме того, у флажков есть свои проблемы при использовании помощников rails, поскольку помощники флажков создают дополнительные скрытые поля для обработки неотмеченного случая.

89
ответ дан 24 November 2019 в 14:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: