2012-08-23 55 views
0

我正在研究一個允許用戶將產品(或訂閱)添加到購物車的小應用程序。在創建他們的賬戶時,新用戶被髮送到「捆綁」頁面,詢問他們是否想爲捆綁價格完全不同的訂購產品添加到不同的產品。Rails 3:循環和拔出項目的最佳實踐

這裏是我卡住的地方:在提交用戶的信用卡信息時,當嘗試設置提交給Authorize.net的捆綁定價時,我會略微「迷失在翻譯中」(我理解如何驗證,而不是此處的問題)。

這是我到目前爲止有:

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循環,因爲在用戶購物車的第二預訂是訂閱也可以獲得折扣。我知道我可以寫這樣的事情:

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 

但我只是不確定這是否是一種最佳做法。思考?

回答

1

那麼唯一沒有打折的訂閱是第一個嗎?爲什麼不把它寫成這樣:

current_order.products.includes(:client).each do |product| 
    if product == current_order.products.first 
    # continue with authnet for single subscription 
    else 
    # run discount logic 
    end 
end