列表视图的 Rails Admin Eager 加载关系

zim*_*ies 6 ruby-on-rails eager-loading rails-admin

我们Ticket在 rails admin 中有一个加载非常缓慢的模型的列表视图。

class Ticket < ActiveRecord::Base
  belongs_to :crew
end
Run Code Online (Sandbox Code Playgroud)

之所以慢,是因为我们crew通过rails_admin_pretty_print访问其他相关模型的方法来显示票证的关系。

class Crew < ActiveRecordBase
   belongs_to :pool
   belongs_to :leader

   def rails_admin_pretty_print
      "leader : #{leader.name} at time #{pool.datetime}"
   end
end
Run Code Online (Sandbox Code Playgroud)

我想在初始查询中急切加载所有这些对象,以加快请求速度。就像是:

config.model "Ticket" do
   object_label_method :rails_admin_pretty_print
   list do
      field :crew, includes(:pool, :leader)
   end
end
Run Code Online (Sandbox Code Playgroud)

我在rails 管理文档中找不到任何方法来做到这一点。有没有办法做到这一点?

Joe*_*edy -1

如果default_scope设置了模型的 ,Rails Admin 将其用于列表视图。显然这并不理想(除非这非常重要并且值得解决方法),但您可以在模型中设置默认范围,Crew如下所示:

class Crew < ActiveRecord::Base
  default_scope { includes(:pool, :leader) }

  # more crew stuff
end
Run Code Online (Sandbox Code Playgroud)

unscoped就像我说的,这并不理想,因为每次想要访问模型时都必须使用Crew而不包含:pooland leader

Crew.unscoped.where(id: [1,2,4])
Run Code Online (Sandbox Code Playgroud)