주문이 공급 업체에 지정되어 있고 공급 업체가 다음 15 분 내에 주문을 수락해야하는 레일 앱이 있습니다 (테스트 목적으로 2 분으로 유지). 주문이 공급 업체에 할당되면 주문 및 공급 업체의 주문 할당 테이블에있는 상태 속성이 할당 됨으로 업데이트됩니다. 이제 공급 업체는 상태를 승인 및 거부로 업데이트하는 기준에 따라 주문을 수락하거나 거부해야합니다. 공급 업체가 배정 시점으로부터 15 분 이내에 주문을 수락/거부하지 않으면 주문 할당 테이블에서 거부 된 상태로 자동 업데이트됩니다. 여기에 조각은스케줄러 작업이 Rails 4에서 실행되지 않음
OrderAssignment 모델 :
class Estamps::OrderAssignment < ActiveRecord::Base
belongs_to :vendor, class_name: 'Estamps::Vendor'
belongs_to :order, class_name: 'Estamps::Order'
belongs_to :status, class_name: 'Estamps::OrderAssignments::Status'
after_save :enqueue_check_status
def enqueue_check_status
AutoRejectionJob.set(wait: 2.minutes).perform_later(self.id)
if self.status_id == 3
OnRejectionJob.perform_later(self.id)
end
end
end
주문 모델 :
has_many :order_assignments
belongs_to :vendor
공급 업체 모델 :
has_many :order_assignments
has_many :orders
Auto_rejection_job
class AutoRejectionJob < ActiveJob::Base
queue_as :auto_rejection
def perform(order_assignment_id)
order_assignment = Estamps::OrderAssignment.find(order_assignment_id)
if order_assignment
if order_assignment.status_id == 1
order_assignment.update_attribute('status_id', '3')
order_assignment.save!
end
end
end
end
OrderAssignment 스키마 : 여기
create_table "estamps_order_assignments", force: :cascade do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "vendor_id"
t.integer "order_id"
t.integer "status_id"
end
status_id는 다양한 상태를 포함하는 다른 테이블에서 비롯됩니다.
이제 상태가 처음 할당 된 상태 할당 레코드 (status_id : 1)를 만든 후 공급 업체가 상태를 업데이트하지 않으면 status_id가 자동으로 status_id : 3 (거부 됨)으로 업데이트됩니다. 이것은 auto_rejection_job에서 달성하려고 시도했습니다. 그러나 작업이 enqued로 표시 되더라도 status_id는 업데이트되지 않습니다. 이 작업은 내가 다음 status_id가 업데이트
AutoRejectionJob.set(wait: 2.minutes).**perform_now**(an id),
로 콘솔을 실행했을 때 제대로 실행 못했지만, 지정된 스케줄 할게 에릭 내가 갈거야 잘못 작동하지 않습니다? 내가 이걸 얻을 수 있니? 레일에 신참, 그래서 제발 도와주세요.
update_attribute 이후에 모델을 저장할 필요가 없습니다. –
@ AleksanderLopez - 고맙습니다. 주요 문제로 나를 도울 수 있습니까? –