【发布时间】:2014-06-10 19:32:44
【问题描述】:
我正在使用acts_as_relation link gem 来实现模型之间的多重继承。如下
# model/m.rb
class M < ActiveRecord::Bas
has_many :m_sgs
accepts_nested_attributes_for :m_sgs
end
# model/m_sg.rb
class MSg < ActiveRecord::Base
belongs_to :m
acts_as_superclass
end
# model/m_sg_w.rb
class MSgW < ActiveRecord::Base
acts_as :m_sg
end
# model/m_sg_b.rb
class MSgB < ActiveRecord::Base
acts_as :m_sg
end
一切正常,但是当我尝试像这样访问时查询非常慢
<% M.all.each do |s| %>
<% if s.as_m_sg_type.to_s == 'MSgW' %>
<tr><td width="15%">mwid</td><td><%= s.specific.mwid %></td></tr>
<tr><td width="15%">mwuserid</td><td><%= s.specific.mwuser_id %></td></tr>
<% end %>
<% end %>
我检查了日志,每当我提出特定请求时,它都会发送一个新的 Select 请求,该请求仅返回 1 行,这是错误的,因为默认情况下“acts_as_relation”提供了 auto_joins。所以请帮我改进这个因为数据检索很慢
【问题讨论】:
-
在你的代码示例中,我看到你迭代了
M,你如何迭代相关的MSg? (我真诚地希望这不是你真正的类名)。
标签: ruby-on-rails activerecord ruby-on-rails-4 multiple-inheritance eager-loading