【问题标题】:Processing orders after minimum order met - Rails 3在满足最低订单后处理订单 - Rails 3
【发布时间】:2011-09-04 12:42:14
【问题描述】:

我的应用有交易,一旦达到最低订单金额就会下订单。目前我已经设置了订单,在提交订单后立即下订单,这一切正常。

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

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

【问题讨论】:

  • 最低订单金额是指订单上的美元价值吗?如果是这样,我只会使用满足这些条件的验证。比如
  • 只是为了澄清我需要最少的交易数量而不是订单。所以一个交易有很多订单,但要使交易可用,必须购买最低数量。

标签: ruby-on-rails ruby-on-rails-3 cron heroku delayed-job


【解决方案1】:

如果我理解正确的话,基本上有很多人必须先下订单才能获得交易,比如 groupon。如果是这样,更简单的方法可能是在每次下新订单时检查是否已下最少订单数。所以说最少是两个订单,你下第一个,你的订单被记录到数据库但没有处理,然后我下订单。当我的订单下达您的应用程序时,它会触发一个条件,可能是通过 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

【讨论】:

  • 是的,这就是我正在寻找的东西。我将采用这个想法,看看它是如何进行的。感谢您的帮助。
【解决方案2】:

最低订单金额是指订单上的美元价值吗?如果是这样,我只会使用满足这些条件的验证。假设最低是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

【讨论】:

    猜你喜欢
    • 2019-04-04
    • 2012-05-12
    • 2017-10-27
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多