将API生成的信息保存到DB

时间:2014-05-27 20:47:02

标签: ruby-on-rails ruby ruby-on-rails-4

我正在努力完成我的第一个电子商务网站。我在rails上使用ruby,我有一个由对fedex和USPS的API调用填充的select表单。看起来像这样

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

哈希来自这里

 <% ship_hash = {} %>
   <% @order_preview.fedex_rates.each do |rate| %>
        <% if rate.service_name == "FedEx Ground Home Delivery" || rate.service_name == "FedEx 2 Day" || rate.service_name == "FedEx Standard Overnight" %>
        <% ship_hash["#{rate.service_name}"] = ["#{number_to_currency(rate.price.to_f / 100)}"] %>
        <% end %>
    <% end %>
   <% @order_preview.usps_rates.each do |rate| %>
        <% if rate.service_name == "USPS Priority Mail 1-Day" %>
          <% ship_hash["#{rate.service_name}"] = ["#{number_to_currency(rate.price.to_f / 100)}"] %>
        <% end %>
    <% end %>

我需要将shipping_type和shipping_price都保存到数据库中。我不想要两种选择形式(没有意义,你可以混合/匹配......)

理想情况下,我想要一个选择表单,其中显示shipping_type,然后列出价格......并将它们保存到我的数据库中各自的列

我想我需要像

这样的东西
<%= f.select :shipping_type, ship_hash.map {|k, v| [k, k]}, :shipping_price, ship_hash.map {|k| [k, k]} %>     

但是这让我

undefined method `merge' for :shipping_price:Symbol

我猜不可能让两个不同的列填充一个选择字段,但是我提取费率,我想让用户在一个下拉列表中看到两种货运类型菜单,同时将部分拆分到数据库中的不同列,这样我以后可以使用算术......这有意义吗?

在这个墙上竖起一堵墙,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

这里的问题是你正在使用:

<select name="shipping_type">

只有一个参数(名称=&#34; shipping_type&#34;)

但你应该使用f.select。像这样:

f.select :shipping_type, @your_model_to_be_selected.map{ |c| [c.name, c.id] }

编辑: 由于您更新了问题,现在您的问题似乎是保存了多个条目。

您有两个选项,可以有两个选项,或者您可以在某种程度上在@your_model_to_be_selected.map{ |c| [c.name, c.id] }内创建一个代表两个数据的逻辑。