希望最后一个问题我会在SO上问一下,对不起,如果你们有人生病了我的话!
我有一个shipping_option键和价格值的哈希值。我希望用户能够在选择的表单上选择他们的选项。我现在的问题是我无法获得表格中同时显示的键和值。我以为我能做到:
<%= f.select :shipping_type, ship_hash.map {|k, v| [k, v]}%>
但只有密钥填写在表单中......
我怎样才能得到价格?
更新
<%= options_for_select(ship_hash.map { |k, v| ["#{k}: #{v}", k] }) %>
显示密钥和值,但只将密钥保存到数据库中,如何将相应的值与密钥保存到数据库中?或者将值保存到DB中自己的单独列中?
<%= f.select :shipping_type, options_for_select(ship_hash.map { |k, v| ["#{k}: #{v}", "#{k} " + "#{v}"] }) %>
答案 0 :(得分:1)
要在选择框中输出您的哈希,请阅读select tag和options_for_select。在您的情况下,您希望将ship_hash
更改为如下所示:
[
["FedEx Ground Home Delivery: $9.78", "FedEx Ground Home Delivery"],
["FedEx 2 Day: $20.59", "FedEx 2 Day"],
["FedEx Standard Overnight: $33.78", "FedEx Standard Overnight"],
["USPS Priority Mail 1-Day: $5.60", "USPS Priority Mail 1-Day"]
]
为此,您可以使用map
方法,如下所示:
ship_hash.map { |k, v| ["#{k}: #{v}", k] }
使用它作为options_for_select
的参数,如下所示:
<%= options_for_select(ship_hash.map { |k, v| ["#{k}: #{v}", k] }) %>
然后将产生以下输出:
<option value="FedEx Ground Home Delivery">
FedEx Ground Home Delivery: $9.78
</option>
<option value="FedEx 2 Day">
FedEx 2 Day: $20.59
</option>
<option value="FedEx Standard Overnight">
FedEx Standard Overnight: $33.78
</option>
<option value="USPS Priority Mail 1-Day">
USPS Priority Mail 1-Day: $5.60
</option>
应该是你想要的。