ユーザーが製品 (またはサブスクリプション) をカートに追加できる小さなアプリに取り組んでいます。アカウントを作成すると、新しいユーザーは「バンドル」ページに送られ、別の製品に別のサブスクリプションをまとめてバンドル価格で追加するかどうかを尋ねられます。
ここで行き詰まっています:ユーザーのクレジットカード情報を送信すると、バンドル価格を設定してAuthorize.netに送信しようとすると、「翻訳に迷い」ます(ここでの質問ではなく、authnetの方法を理解しています)。
これが私がこれまでに持っているものです:
current_order.products.includes(:client).each do |product|
transaction = current_order.submit_order_to_authnet(product)
if transaction.result_code == 'Ok'
new_group = Group.create!(:name => "#{current_user.full_name} #{product.title}", :type => 'school', :start_date => Time.now, :status => 'active', :site_id => 1)
primary = session[:primary_product_id].eql?(product.id) ? true : false
# Add subscription to Group
new_group.add_subscription(product, current_order, transaction.subscription_id, 'active', primary)
# Add Subscription to CurrentOrder
current_order.subscriptions << new_group.subscriptions.last
# Add user to NewGroup
current_user.groups << new_group
# Create New Group Admin
new_group.group_admins.create(:user_id => current_user.id)
# Send success email
OrderMailer.checkout_confirmation(current_user).deliver
else
errors << transaction.result_code
end
end
current_order
ユーザーのカート内の 2 番目のサブスクリプションは割引が適用されるサブスクリプションであるため、ユーザーの各製品をループする際に最適なソリューションを見つけようとしています。私はこのようなものを書くことができることを知っています:
current_order.products.includes(:client).each do |product|
if current_order.products.many? and product == current_order.products.last
# run discount logic
else
# continue with authnet for single subscription
end
end
しかし、それがベストプラクティスであるかどうかはわかりません。考え?