Сохранение ответа json в create - PullRequest
0 голосов
/ 26 июня 2019

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

У меня есть следующий ответ от отправки формы:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"2134", "shipping_rate"=>{..."shipping_rate"=>"{\"serviceName\"=>\"USPS First Class Mail - Package\", \"serviceCode\"=>\"usps_first_class_mail\", \"shipmentCost\"=>2.66, \"otherCost\"=>0.0}"}, "commit"=>"Create Shipping rate"}

форма:

...
<% @rates.each do |rate| %>
  <%= form.radio_button :shipping_rate, rate.as_json %> <%= rate %><br />
<% end %>
...

У меня сложилось впечатление, что as_json удаляет символ "/", поэтому он используется в качестве параметров хеширования.

Я также пытался использовать @rates.as_json.each с такими же результатами

Создать метод в контроллере:

@shipping_rate.service_code = params["shipping_rate"]["shipping_rate"]["serviceCode"]

Как сохранить service_code как «serviceCode», а не как «usps_first_class_mail».

Как я могу:

  1. Получить параметры в виде хэша без /
  2. Сохранить значение params["shipping_rate"]["shipping_rate"]["serviceCode"] вместо заголовка

1 Ответ

0 голосов
/ 26 июня 2019

rate.as_json правильно возвращает хеш, но когда вы передаете данные в form.radio_button, они преобразуются во что-то дружественное HTML. По сути, form.radio_button вызывает .to_s (или некоторый подобный метод, который, вероятно, также экранирует HTML) для этого хеша, поэтому вы получаете хеш в виде строки.

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

Тебе следует сделать шаг назад и подумать об этом ОТДЕЛЬНО. Если ваши пользователи должны выбрать тариф, и у вас есть несколько записей о ставках в вашей базе данных, вам действительно нужно, чтобы они отправили обратно id желаемой ставки. Не видя вашего контроллера, трудно сказать точно, что еще нужно изменить, но ваши радиокнопки должны выглядеть примерно так:

<%= form.radio_button :rate_id, rate.id %>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...