1

ビューでクエリを最適化 (制限) しようとしています。fields_for関数を使用しています。表示用のユーザー名など、オブジェクトのさまざまなプロパティを参照する必要があります。ただし、これは rel テーブルなので、users テーブルと結合する必要があります。結果は、 fields_forのフィールドごとに 1 つずつ、N 個のサブクエリになります。説明するのは難しいですが、コードを貼り付ければ、私が求めていることを理解できると思います。

<%= 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 %>
...

しかし、もちろん、それはうまくいきません:(

4

3 に答える 3

2

有権者の関係が常に選挙モデルのユーザーと結合するようにするだけです。

class Election < ActiveRecord::Base
  has_many :voters, :include => :users
end

関連付けに関する Rails のドキュメントと、モデルで関係を宣言するときに指定できる追加のオプションをお読みください。

http://railsapi.com/doc/rails-v3.0.1/classes/ActiveRecord/Associations/ClassMethods.html#M001055

于 2010-12-24T09:34:11.923 に答える
0

だから、これを行う方法はわかりませんが、回避する方法を見つけました。私は自分のモデルでlection.votersをオーバーライドして、joined on usersを返しました...

于 2010-12-24T02:59:00.720 に答える
0

ユーザーを結合する名前付きスコープを作成することもできます

class Election < ActiveRecord::Base
  has_many :voters
  scope :with_voters, :include => :voters
  …
end

次に、次のようなものを使用できますElection.with_voters.first

于 2010-12-24T11:11:12.433 に答える