Ruby on rails ActiveJob中的即时加载

Ruby on rails ActiveJob中的即时加载,ruby-on-rails,mongoid,ruby-on-rails-5,Ruby On Rails,Mongoid,Ruby On Rails 5,我有一个带有一些参数的ActiveJob,这些参数已经用GlobalID序列化 执行作业时,如何加载一些关联模型 class Foo has_one :bar end class Bar belongs_to :foo field :some_field end class MyJob < ApplicationJob queue_as :default def perform(foo) # How can I eager load bar ? f

我有一个带有一些参数的ActiveJob,这些参数已经用GlobalID序列化

执行作业时,如何加载一些关联模型

class Foo
  has_one :bar
end

class Bar
  belongs_to :foo
  field :some_field
end

class MyJob < ApplicationJob
  queue_as :default

  def perform(foo)
    # How can I eager load bar ?
    foo.bar.some_field # Hits the DB again without eager loading
  end
end
class-Foo
有一个:酒吧
结束
分类栏
属于:富
领域:一些领域
结束
类MyJob

这只是一个简单的例子,但在我的应用程序中,我需要快速加载多个模型,有时我甚至在没有它的情况下出现N+1问题(在不同的示例中,没有快速加载)

如果
foo
bar
是单数项,我不明白为什么这会导致N+1问题

否则,即时加载在ActiveJob中工作,就像ActionController或其他任何地方一样:

class Foo
  has_many :bars
end

class Bar
  belongs_to :foo
  field :some_field

  def title
    "Title"
  end
end
您可以像这样加载
:条
关联:

foo = Foo.find(id).includes(:bars)

foo.find_each do |foo_item|
   # Process foo.bar.title without needing another query...
end
此外,如果可能,您应该将primivies(例如
id
)而不是对象传递给
perform
方法。活动作业在将对象插入队列之前需要序列化对象,因此有时通过
id
引用从数据库中获取对象更简单、更容易。

因此,如果我们需要快速加载,基本上这个技巧就没用了?