Я пытаюсь обновить запись из формы 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, и обновить запись?






Вы помещаете массив как строку в скрытое поле.
Пытаться:
%input{:name => "post[my_card_ids]", :type => "hidden",value: "#{post["my_card_ids"].join(','}",id: "my_card_ids"}
И в контроллере
params[:my_card_ids].split(',')
У меня также есть метод разделения, уже примененный в контроллере. Проблема, которую я пытаюсь решить, заключается в том, как обеспечить передачу массива вместо строки
Это не сработает, поскольку значение параметров представляет собой массив со строкой, содержащей «экранированный» рубиновый массив. ["[\"5d1b83a6616b6523a9020000\", \"5d1b9893616b653abd0b0000\"]"]. Это то, что вы получаете, когда вызываете #to_s в массиве. Хотя вы можете использовать YAML или JSON, чтобы снова разобрать его в массив, есть лучшее решение.
Чтобы создать массив в параметрах, вы хотите создать скрытый ввод для каждого значения в массиве:
- 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? Как будет выглядеть отступ для достижения этого?
Добавьте условие - if post["my_card_ids"].present?, а затем сделайте отступ в коде, который должен быть охвачен условием, двумя пробелами.
Он уже передается как строка, применение метода соединения дает ошибку «неопределенное соединение метода для строки».