如何在Rails模型中获取当前用户

时间:2019-05-08 12:38:28

标签: ruby-on-rails model

我在应用程序中使用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

我想让Document作业模型中的当前用户存储在db中。

我正在所有Sidekiq工作人员中调用create_document_job方法

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 

在DocumentJob模型的create_document_job方法中创建文档作业时,我想获取当前的用户ID。如何获取并存储它?

2 个答案:

答案 0 :(得分:2)

您无法在工作中从Devise访问current_user。因此,将其作为参数从您的工作位置发送。 此外,Sidekiq使用的Redis仅包含键值对。因此,不要传递用户对象,而是传递用户ID,然后在工作中就可以@user = User.find(user_id)

答案 1 :(得分:0)

我建议将user_id作为参数传递给作业,因为,如我所见,首先,您只需要user_id;第二,它比传递完整的加载对象轻,这可以如果在队列数据库(例如Redis)中存储许多作业,效率会降低。

如果您需要加载用户对象,仍然可以通过调用以下命令在工作中完成它:

user = User.find user_id