我正在为在线商店创建结帐。当客户填写了他的运费和结算信息时,它会将他们带到订单摘要页面。这是我的动作控制器:
def order_summary
@cart = current_or_guest_user.cart
@purchase = current_or_guest_user.incomplete_purchases.last
if @purchase.shipping_method.uses_ups?
products = @cart.cart_items.map(&:product)
ups_shipping = UpsShipping.new(products: products, purchase: @purchase)
@shipping_rate = ups_shipping.request_shipping_rate
else
@shipping_rate = UnitedStatesPostalServiceShipping.calculate_shipping_rate(sub_total: @cart.total)
end
end
UpsShipping
和UnitedStatesPostalServiceShipping
是我编写的非ActiveRecord模型,用于访问外部API以请求运费。它们不指向我数据库中的任何表。
他们在数据库中没有任何记录,我需要一种方法来在order_summary
之后的请求中保留@shipping_rate响应的值并将其存储为@purchase.shipping_cost
。我想要么只是将它存储在会话中,要么在视图中放置一个隐藏的字段。
在视图中使用<%= hidden_field_tag "purchase[shipping_cost]" @shipping_rate %>
标记是否安全?或者将会议中的内容更安全?
或者是在下一次请求中再次点击UPS / USPS API的最佳选择?我认为再次点击API会使我的应用程序更加脆弱,这就是为什么我只想点击它并保存值。对此的想法?