在f.select中显示键值

时间:2014-05-28 04:16:48

标签: ruby

希望最后一个问题我会在SO上问一下,对不起,如果你们有人生病了我的话!

我有一个shipping_option键和价格值的哈希值。我希望用户能够在选择的表单上选择他们的选项。我现在的问题是我无法获得表格中同时显示的键和值。我以为我能做到:

      <%= f.select :shipping_type, ship_hash.map {|k, v| [k, v]}%>    

但只有密钥填写在表单中......

enter image description here

我怎样才能得到价格?

更新

<%= 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}"] }) %>  

1 个答案:

答案 0 :(得分:1)

要在选择框中输出您的哈希,请阅读select tagoptions_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>

应该是你想要的。