У меня есть приложение rails, где заказ присваивается поставщику, и поставщик должен принять заказ в течение следующих 15 минут (для целей тестирования я сохраняю его до двух минут). Как только заказ назначается поставщику, атрибут статуса в таблице назначения заказов для заказов и поставщиков обновляется до назначенного. Теперь поставщик должен принять или отклонить заказ, на основании которого статус обновляется до принятого и отклоненного соответственно. Если продавец не принимает/отклоняет заказ в течение следующих 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 не обновляется. Задание было правильно работать, когда я запустил его на консоли, как
AutoRejectionJob.set(wait: 2.minutes).**perform_now**(an id),
то status_id обновляется, но не работает на указанный запланировано time.Where я буду неправильно? Хоу, могу ли я это достичь? Новичок для рельсов, поэтому, пожалуйста, помогите.
Вам не нужно сохранять модель после update_attribute. –
@AleksanderLopez - я отредактирую это спасибо. Можете ли вы помочь мне с основной проблемой? –