Как получить текущего пользователя в модели Rails - PullRequest
0 голосов
/ 08 мая 2019

Я использую Rails 5.2 для своего приложения и sidekiq для обработки фонового задания.

class Document < ApplicationRecord
  has_many :document_jobs
end


class DocumentJob < ApplicationRecord

  belongs_to :document

  def self.create_document_job(document, status, details)
    document.document_jobs.create(status: status, details: details, user_id: user_id)
  end

  def self.update_document_job(document_job, status, details)
    document_job.update(status: status, details: details)
  end

end

Я хочу, чтобы текущий пользователь в модели заданий Документа сохранялся в БД.

Я вызываю метод create_document_job для всех работников Sidekiq

class DocumentWorker
  include Sidekiq::Worker
  def perform(*args)
    document = Document.find_by_name("sample")
    document_job = DocumentJob.create_document_job(document, "processing", "job details")

  rescue StandardError => e
   DocumentJob.create_document_job(document_job, "failed", "job error details")
  end
end 

Я хочу получить текущий идентификатор пользователя при создании задания документа в методе create_document_job модели DocumentJob. Как я могу получить его и сохранить?

Ответы [ 2 ]

2 голосов
/ 08 мая 2019

Вы не можете получить доступ к current_user от Devise на рабочих местах.Так что отправь его как парам с того места, где ты называешь работу.Кроме того, Sidekiq использует Redis, который содержит только пары ключ-значение.Поэтому не передавайте объект пользователя, а только идентификатор пользователя, а затем в задании, которое вы можете сделать @user = User.find(user_id)

0 голосов
/ 09 мая 2019

Я бы порекомендовал передать user_id в качестве параметра для задания, потому что, во-первых, как я вижу, вам нужен только user_id, а во-вторых, он легче, чем передача полностью загруженного объекта, что можетбыть неэффективным, если вы храните много заданий в БД с очередями, таких как Redis.

Если вам нужно загрузить объект пользователя, вы все равно можете сделать это внутри задания, вызвав:

user = User.find user_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...