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)
| 归档时间: |
|
| 查看次数: |
622 次 |
| 最近记录: |