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

时间:2014-03-11 17:59:57

标签: ruby-on-rails eager-loading rails-admin

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

class Ticket < ActiveRecord::Base
  belongs_to :crew
end

它很慢的原因是我们通过访问其他相关模型的方法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

我想在初始查询中急切加载所有这些对象,以加快请求速度。类似的东西:

config.model "Ticket" do
   object_label_method :rails_admin_pretty_print
   list do
      field :crew, includes(:pool, :leader)
   end
end

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

1 个答案:

答案 0 :(得分:0)

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

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

  # more crew stuff
end

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

Crew.unscoped.where(id: [1,2,4])