Как обновить, передав значения массива из HTML в контроллер Rails

Я пытаюсь обновить запись из формы html.haml.

HTML.HAML:

%input{:name => "post[my_card_ids][]", :type => "hidden",value: "#{post["my_card_ids"]}",id: "my_card_ids"}

Когда я просматриваю HTML-страницу, значения точно такие, какими они должны быть.

Проверка HTML:

<input id = "my_card_ids" name = "post[my_card_ids][]" type = "hidden" value = "[5d1b83a6616b6523a9020000, 5d1b9893616b653abd0b0000]">

Но когда я получаю те же параметры в контроллере, они становятся такими:

Рельсовая консоль:

<ActionController::Parameters {"my_card_ids"=>["[\"5d1b83a6616b6523a9020000\", \"5d1b9893616b653abd0b0000\"]"]

Запись сохраняется со всеми дополнительными скобками и кавычками, потому что я предполагаю, что она передается как строка.

Как правильно передать массив, как показано при проверке HTML, и обновить запись?

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
0
497
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы помещаете массив как строку в скрытое поле.

Пытаться:

%input{:name => "post[my_card_ids]", :type => "hidden",value: "#{post["my_card_ids"].join(','}",id: "my_card_ids"}

И в контроллере

params[:my_card_ids].split(',')

Он уже передается как строка, применение метода соединения дает ошибку «неопределенное соединение метода для строки».

A.A. F 18.07.2019 14:53

У меня также есть метод разделения, уже примененный в контроллере. Проблема, которую я пытаюсь решить, заключается в том, как обеспечить передачу массива вместо строки

A.A. F 18.07.2019 14:54

Это не сработает, поскольку значение параметров представляет собой массив со строкой, содержащей «экранированный» рубиновый массив. ["[\"5d1b83a6616b6523a9020000\", \"5d1b9893616b653abd0b0000\"]"]. Это то, что вы получаете, когда вызываете #to_s в массиве. Хотя вы можете использовать YAML или JSON, чтобы снова разобрать его в массив, есть лучшее решение.

max 18.07.2019 15:14
Ответ принят как подходящий

Чтобы создать массив в параметрах, вы хотите создать скрытый ввод для каждого значения в массиве:

- post["my_card_ids"].each do |card_id|
  %input{ name: "post[my_card_ids][]", type: "hidden", value: card_id, id: "my_card_ids_#{card_id}" }

Это работает, поскольку Rack объединяет параметры с именами, оканчивающимися на [], в массив. Так же работает встроенный FormOptionsHelper.

Я также хочу добавить условие if для входа в цикл if post["my_card_ids"].present? Как будет выглядеть отступ для достижения этого?

A.A. F 18.07.2019 15:42

Добавьте условие - if post["my_card_ids"].present?, а затем сделайте отступ в коде, который должен быть охвачен условием, двумя пробелами.

max 19.07.2019 11:21

Другие вопросы по теме