Обработка заказов после выполнения минимального заказа - Rails 3 - PullRequest
1 голос
/ 30 мая 2011

В моем приложении есть сделки, в которых заказы выполняются после достижения минимальной суммы заказа.В настоящее время я установил заказы, чтобы эти заказы размещались сразу после отправки заказа, и все это работает.

Теперь мне нужно изменить процесс так, чтобы заказы обрабатывались после выполнения минимального номера заказа для сделки.

Должен ли я использовать 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

IЯ запускаю это приложение на Heroku.Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 30 мая 2011

Если я правильно понимаю, в основном, кучка людей должна сделать заказ, прежде чем кто-либо заключит сделку, например, 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
0 голосов
/ 30 мая 2011

Под минимальной суммой заказа вы подразумеваете стоимость заказа в долларах? Если это так, я бы просто использовал проверку, которая соответствует этим условиям. Допустим, минимум 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
...