data = {
"color" => "red",
"color" => "green",
"color" => "blue"
}
你不能这样,因为它会导致Ruby只有一个键:
> { a: 1, a: 2, a: 3 }
=> {:a=>3}
但是你可以有这个:
data = {
colors: [ 'red', 'green', 'blue' ]
}
为此,请使用以下 HTML 表示法:
<input name="color[]" value="red"/>
<input name="color[]" value="green"/>
<input name="color[]" value="blue"/>
这将转换为 GET 请求:
?color[]=red&color[]=green&color[]=blue
并发布为:
color[]: red
color[]: green
color[]: blue
两者都将在服务器端提供:
params[ :color ] == [ 'red', 'green', 'blue' ]
如果您必须以这种方式提供参数,则可以利用Net::HTTP.post_form
. 在您的 HTML 中:
<input name="color[]" value="red"/>
<input name="color[]" value="green"/>
<input name="color[]" value="blue"/>
然后,在您的控制器中:
colors = params.delete( :color )
Net::HTTP.post_form( uri, { 'color' => colors }.merge( params ) )
Net::HTTP.post_form
接受具有数组作为值的参数,但不要触摸键符号。因此,如果您将"color"
密钥更改为通常的参数约定,您将使用"color[]"
.
这正是您不想在您的情况下做的事情。保留密钥"color"
将达到预期的结果。