2011-05-30 34 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