这些是我的参数:
{"utf8"=>"✓",
"authenticity_token"=>"xiWiAmt4BUsPZc/Yq2DJCrVdNsxkBCk6njhmOtr2dz0=",
"price"=>{"{:value=>7900}"=>""}
我试图将值(即7900)分配给控制器中的对象:
@amount = params[:price][:value]
似乎不起作用。
答案 0 :(得分:2)
您如何将哈希值分配给价格?
您的问题是价格包含一个密钥为"{:value=>7900}"
且值为""
的哈希。这意味着params[:price][:value]
不会带回任何内容,而params[:price]['{:value=>7900']
会有效,但会返回""
的值。
看看你如何设定价格值,并确保正确设置。
好的,通过你的评论,可以更清楚地知道发生了什么。
因为你刚刚使用<%= hidden_field:price%>它将名称设置为您给出的值,在这种情况下是价格[value7900]。这是因为hidden_field采用了三个参数hidden_field(:object, :field, :value => params[:requestval])
。所以你将value7900传递给field参数。修复只是添加缺少的参数。
<%= hidden_field :price, :value, :value => rate.price.to_i * 100 %>
我知道值标签看起来多余,但这是因为一个是设置参数的名称而另一个是实际设置值。
这是它产生的HTML。
<input id="price_value" name="price[value]" type="hidden" value="7900">
你需要在这里使用所有三个变量而不是在其他地方使用的原因是因为你没有使用表单对象。如果它被一个表单包裹并使用该对象,您将不需要第一个参数。
<%= form_for @price do |f| %>
<%= f.hidden_field :value, :value => rate.price.to_i * 100 %>
<%= f.submit %>
<% end %>
答案 1 :(得分:2)
您的hidden_field
不正确。它应该是:
<%= hidden_field_tag :price, rate.price.to_i * 100 %>
答案 2 :(得分:0)
你可以解析它:
@amount = params[:price].keys.first[/\d+/].to_i