2011-05-30 32 views
1

我的應用程序具有訂單處理功能,只要達到最低訂單數量,訂單就會生成。目前,我已經設置了訂單,這些訂單在訂單提交完成後立即生效。滿足最低訂單後處理訂單 - Rails 3

現在我需要更改流程,以便在符合交易的最小訂單號時處理訂單。

我應該使用delayed_job作爲此還是cron進程?

下面是我正在考慮的過程。

延遲訂單直到訂單的最低滿足那些仍然活躍

  • 然後在找到通過交易,其中訂單的最低數量都滿足
  • 對於每個交易訂單,循環和處理捕獲

    1. 搜索優惠每個訂單。
    2. 發送訂單確認。

    我的訂單模型購買方法

    def purchase 
        response = OrderTransaction.gateway.purchase(order_amount, credit_card, options) 
        transactions.create!(:action => "purchase", :amount => order_amount, :response => response) 
        response.success? 
    end 
    

    我創造我的命令控制方法。

    def create 
        @member = current_member 
        @order_deal = Deal.find(params[:deal_id]) 
        @order = @order_deal.orders.build(params[:order]) 
        @order.member_id = current_member.id 
        @order.ip_address = request.remote_ip 
        @deal = @order_deal 
        if @order.save 
         if @order.purchase 
         MessageMailer.order_receipt(@order, @member).deliver 
         render :action => "success" 
         flash[:notice] = "Successfully created order." 
         else 
         render :action => "new" 
         end 
        else 
         render :action => 'new' 
        end 
    end 
    

    我在Heroku上運行這個應用程序。任何幫助表示讚賞。

  • +0

    通過最小訂單量,你的意思是爲了對一美元的價值?如果是這樣,我只會使用符合這些條件的驗證。如 – agmcleod 2011-05-30 02:17:03

    +0

    只是爲了澄清,我需要的交易的最低數量不是訂單。所以一個交易有很多訂單,但交易是可用的,必須購買最小數量。 – 2011-05-30 05:05:28

    回答

    1

    如果我理解正確的話基本上是一堆人有任何人得到這筆交易之前,像團購下單。如果是這樣,更簡單的方法可能只是檢查每次下單時是否放置了最小數量的訂單。所以說最低限度是兩個訂單,你把第一個和您的訂單記錄到數據庫但沒有處理,然後我把我的訂單。當我的訂單被放置在應用程序中時,它會觸發一個條件,可能是通過before_save在模型層中,然後該應用程序將爲該交易提取所有訂單並處理它們。這種實現很好,因爲您不必經常檢查輔助進程(延遲作業),以查看是否滿足最低要求。一旦滿足閾值,延遲作業可能有助於處理所有訂單。

    這裏是一個模型的一些示例代碼(你也可以做到這一點的控制器在理論上)

    before_save :check_if_minimum_has_been_met 
    
    def check_if_minimum_has_been_met 
    
        if deal.minimum_orders < deal.orders + 1 #to count the current order 
        #execute the delayed job/order processing 
        else 
        #do nothing.... 
        end 
    end 
    
    +0

    是的,這是我正在尋找的東西。我正在研究這個想法,看看它是如何發展的。謝謝你的幫助。 – 2011-05-30 12:04:19

    +0

    我已經開始玩這個想法,並想知道這是否意味着我需要將信用卡詳細信息存儲在數據庫中以便以後處理,因爲信用卡詳細信息是在訂購過程中捕獲的。 – 2011-06-07 06:58:15

    0

    通過最小訂貨量,您是否意味着訂單上的美元價值?如果是這樣,我只會使用符合這些條件的驗證。比方說,最小的是20,你可以做

    validates :amount, :numericality => { :greater_than_or_equal_to => 20, if => :is_a_deal } 
    private 
        def is_a_deal 
        # deal logic here. Return true/false 
        end