在达到最小订单后处理订单 – Rails 3

我的应用程序有交易,一旦达到最低订单金额就会下订单。 目前我已设置订单,订单在提交订单后立即放置,这些订单全部正常。

现在我需要更改流程,以便在达到交易的最小订单编号后处理订单。

我应该使用delayed_job还是cron进程?

这是我想要遵循的过程。

延迟订单直到达到最低订单

  1. 查找仍处于活动状态的交易
  2. 然后查找满足最低订单数量的交易
  3. 对于每个交易订单,循环并处理每个订单的捕获。
  4. 发送订单确认。

我的订单型号购买方式

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上运行这个应用程序。 任何帮助表示赞赏。

如果我理解正确,一群人必须在任何人得到交易之前下订单,比如groupon。 如果是这样,更简单的方法可能只是检查每次下订单时是否已下达最小订单数。 所以说最小值是两个订单,你放置第一个,你的订单记录到数据库但没有处理,然后我下订单。 当我的订单被放置到你的应用程序时它会触发一个条件,可能是在模型层通过before_save,然后app拉出交易的所有订单并处理它们。 这种实现很好,因为您不必经常检查辅助进程(延迟作业)以查看是否已满足最低要求。 一旦达到阈值,延迟作业可能有助于处理所有订单。

以下是模型的一些示例代码(理论上也可以在控制器中执行)

 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 

按最低订单金额,您是指订单中的美元价值吗? 如果是这样,我会使用符合这些条件的validation。 假设最小值是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