0

我正在使用 Rails3,目前正在使用“active_shipping”gem。当我使用以下代码行遍历费率集合时:

   <%res.rates.sort_by(&:price).each do |rate|%>
   <%service_name = rate.service_name%>
   <%postage_rate = (@bank.get_rate(res.rate_estimates[0].currency,:USD)
   * (rate.price).to_f/100).round(2)%>
   <%=service_name%>, <%=postage_rate%>

我得到以下输出:

UPS Standard、40.93
UPS Saver、73.56
UPS Express、
76.54 UPS Worldwide Express Plus、129.16

然后,当我使用 hash 时,service_name 是一个键,而 postage_rate 是一个值。

 <%records = {service_name => postage_rate }%>

然后我创建radio_buttons:

<%records.each do |key,value|  %> 
<%=f.radio_button :service_name,key%> <%="#{key}, #{value}" %><br/>

在此处输入图像描述

整个代码如下:

 <%res.rates.sort_by(&:price).each do |rate|%>
 <%service_name = rate.service_name%>
 <%postage_rate = (@bank.get_rate(res.rate_estimates[0].currency,:USD)
 * (rate.price).to_f/100).round(2)%>

 <%records = {service_name => postage_rate }%>

  <%records.each do |key,value|  %> 
  <%=f.radio_button :service_name,key%> <%="#{key}, #{value}" %><br/>
  
  <%records.length do |i|%>
  <%if i.checked == "true"%> 

  <% if (records.key?(key)) %>
   <%postage_rate = records["#{key}"]%>  

  <%= f.hidden_field :service_name,:value=>key%> 
  <%= f.hidden_field :postage_rate, :value=>postage_rate%>
  <%= f.hidden_field :price_and_rate, :value=>((p.price * order_item.amount)
   + (postage_rate * order_item.amount)).round(2)%>
  <%= f.hidden_field :admin_charge, :value=>(((p.price * order_item.amount)+ 
  (postage_rate * order_item.amount))/100).round(2)%><br/>

  <%end%>
    <%end%>
      <%end%>
         <%end%>

service_name 被分配了一个值,但 postage_rate 没有。我不知道为什么。我得到以下异常:

Mysql2::Error: 列 'admin_charge' 不能为 null: INSERT INTO curriers( admin_charge, amount, buyer, cart_id, order_item_id, postage_rate, price, price_and_rate, seller, service_name) VALUES ( NULL , 1, 'xxxxxx, xxxxxx@xxxxx.com, +xxxxxxx, xxxxx ,xxxx, United Kingdom ,xxxxxx', 5, 20, NULL , 45.34, NULL , 'xxxxx,xxxxx,xxxx, Woking, xxxxxx, United Kingdom', 'UPS Saver' )

它引发异常,因为该值未分配给 postage_rate。任何帮助将不胜感激。(对不起我的英语:()

4

1 回答 1

0

第一步:我已将 :service_name 和 :postage rate 变成一个字符串:

<%service_name = "#{rate.service_name} , 
 # {(@bank.get_rate(res.rate_estimates[0].currency,:USD) 
 * (rate.price).to_f/100).round(2)}"%>

第二步: 我使用以下方法显示单选按钮:

<%res.rates.sort_by(&:price).each do |rate|%>
 <%service_name = "#{rate.service_name} , 
 #{(@bank.get_rate(res.rate_estimates[0].currency,:USD) 
 *(rate.price).to_f/100).round(2)}"%>


 <%postage_rate = (@bank.get_rate(res.rate_estimates[0].currency,:USD) 
 *(rate.price).to_f/100).round(2)%> 

 <%service_names << service_name%>
 <%=f.radio_button :service_name,service_name%> <%= service_name %> <br/>
 <%service_names.length do |i|%>
 <%if i.checked == "true"%> 

 <%= f.hidden_field :service_name,:value=>service_name %>  

        <%end%>
     <%end%>
 <%end%>

在此处输入图像描述

第三步:我从 curriers 表中删除了 :postage_rate、:price_and_rate 和 :admin_charge 属性,并将它们添加到 order_items 表中。我留在 curriers 表中的 :service_name 属性。我这样做是因为在将 curriers 表中的 :service_name 属性保存为字符串(如 UPS Standard, 40.93 )并使用 'match' 方法后,我可以将数字 40.93 从 matchdata 取出到字符串然后浮动:

 def get_postage_rate
 "#{service_name}".match(/(\d+)\.(\d+)/).to_s 
 end

第四步:我希望我的“添加”按钮做两件事:a) 将 :service_name 属性保存在 curriers 表中,b) 同时更新 order_items 表中的 :postage_rate、:price_and_rate 和 :admin_charge 属性。所以,我在 CurriersController 文件中更改了我的创建方法:

 def create  
 @currier = Currier.new(params[:currier])

 if @currier.save

 @order_item = OrderItem.find(@currier.order_item.id)
 value = @currier.get_postage_rate

          @order_item.update_attributes(
              :postage_rate =>value.to_f, 
              :price_and_rate => ((@order_item.price * @order_item.amount)
          +(value.to_f *   @order_item.amount)).round(2),
              :admin_charge => (((@order_item.price * @order_item.amount)+ 
          (value.to_f * @order_item.amount))/100).round(2)
            ) if @currier.service_name != ""

     flash[:notice]= "Currier #{@currier.service_name} was successfully created."
     redirect_to :controller=>'checkout',:action => 'rate_response'

     else  

      @page_title = ''
      render :action=>'new'
         end
      end

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

于 2013-10-15T19:52:20.077 回答