RAILS 3 FIELDS_为攻击加载吗?
-
13-10-2019 - |
题
我正在尝试在视图中优化(限制)查询。我正在使用 fields_for 功能。我需要参考对象的各种属性,例如用于显示目的的用户名。但是,这是一个Rel表,因此我需要与用户表一起加入。结果是n个子征服,每个字段为1 fields_for. 。很难解释,但是我想您会理解我在问我是否粘贴代码:
<%= form_for @election do |f| %>
<%= f.fields_for :voters do |voter| %>
<%= voter.hidden_field :id %>
<%= voter.object.user.preferred_name %>
<% end %>
<% end %>
我有10,000个用户,每次选举很多次都将包括所有10,000名用户。每次加载此视图时,这都是10,000个子查询。我想 fields_for 加入用户。这可能吗?
我想做类似的事情:
...
<%= f.fields_for :voters, :joins => :users do |voter| %>
...
<% end %>
...
但这当然不起作用:(
解决方案
您可以确保选民的关系始终与选举模型中的用户相连。
class Election < ActiveRecord::Base
has_many :voters, :include => :users
end
阅读有关关联的导轨文档以及在模型中声明关系时可以提供的额外选项。
http://railsapi.com/doc/rails-v3.0.1/classes/activerecord/associations/classmethods.html#m001055
其他提示
因此,我不知道该怎么做,但是我找到了解决方案。我覆盖了选举。在我的模型中投票以返回用户加入...
您还可以创建一个加入用户的命名范围
class Election < ActiveRecord::Base
has_many :voters
scope :with_voters, :include => :voters
…
end
那么您可以使用类似的东西 Election.with_voters.first
不隶属于 StackOverflow