0

我想保存一个 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. 让参数作为散列通过,没有/'s
  2. 保存值params["shipping_rate"]["shipping_rate"]["serviceCode"]而不是标题
4

1 回答 1

0

rate.as_json正确地返回了一个哈希值,但是当你将数据传递给 form.radio_button 时,它会被转换成对 html 友好的东西。基本上, form.radio_button 在该哈希上调用.to_s(或一些可能也转义 html 的类似方法),这就是为什么您将哈希作为字符串获取的原因。

通常,单个 HTML 表单元素不应包含散列数据,尤其是 ruby​​ 格式的散列数据。请记住,一旦页面在浏览器中呈现,它就对后端一无所知,更不用说如何运行 ruby​​ 代码了。

您应该退后一步,以 REST 的方式考虑这一点。如果您的用户打算选择一个费率,并且您的数据库中有许多费率记录,那么您实际上只需要他们发回他们想要的费率的ID。如果没有看到您的控制器,很难确切地知道还需要更改哪些内容,但是您的单选按钮应该看起来更像:

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

然后,您的控制器的 create 方法将负责设置用户选择的费率,可能需要您再次查找费率。

于 2019-06-26T06:55:43.013 回答