Question

Je suis en train de optimize (limite) les requêtes en vue. J'utilise le fields_for fonction. Je dois faire référence à différentes propriétés de l'objet, comme nom d'utilisateur à des fins d'affichage. Cependant, ceci est une table rel, donc je dois joindre à ma table d'utilisateurs. Le résultat est N sous-requêtes, 1 pour chaque champ fields_for . Il est difficile d'expliquer, mais je pense que vous comprendrez ce que je me demande si je colle mon code:

<%= form_for @election do |f| %>
  <%= f.fields_for :voters do |voter| %>
    <%= voter.hidden_field :id %>
    <%= voter.object.user.preferred_name %>              
  <% end %>
<% end %>

J'ai comme 10.000 utilisateurs, et plusieurs fois chaque élection comprendra tous les 10.000 utilisateurs. C'est à chaque fois 10.000 sous-requêtes ce point de vue est chargé. Je veux fields_for JOIN sur les utilisateurs. Est-ce possible?

Je voudrais faire quelque chose comme:

...
<%= f.fields_for :voters, :joins => :users do |voter| %>
  ...
<% end %>
...

Mais, bien sûr, ne fonctionne pas: (

Était-ce utile?

La solution

vous pouvez simplement faire en sorte que la relation des électeurs se joint toujours avec les utilisateurs du modèle électoral.

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

Lire la documentation Rails sur les associations et les options supplémentaires vous pouvez fournir lors de la déclaration des relations dans le modèle.

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

Autres conseils

Alors, je ne sais pas comment faire, mais j'ai trouvé un moyen de contourner. Je l'emportaient sur election.voters dans mon modèle à revenir rejoint les utilisateurs ...

Vous pouvez également créer un champ nommé qui relie les utilisateurs

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

vous pouvez alors utiliser quelque chose comme Election.with_voters.first

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top