2013-08-29 2 views
0

Supposons que j'avoir ces 6 modèles tels queComment puis-je utiliser le chargement impatient dans ce cas?

  • utilisateur
  • Profil
  • Sexe
  • Pays
  • Préfecture
  • Car

User a un Profile.
Ensuite, chaque Profile a ceux qui sont gender_id, country_id et prefecture_id.
User a aussi beaucoup Cars

Je suis en indiquant Asssociation comme ça.

modèles/user.rb

has_one :profile 
has_many :cars 

scope :confirmed, where("sign_in_count != ?",0) 
paginates_per 10 

modèles/profile.rb

belongs_to :user 
belongs_to :gender 
belongs_to :country 
belongs_to :prefecture 

modèles/gender.rb

has_many :user_profile 

modèles/country.rb

has_many :user_profile 

modèles/prefecture.rb

has_many :user_profile 

modèles/car.rb

belongs_to :user 

Et voici ma question!
Comment puis-je corriger mon code dans le contrôleur et afficher?

Ceci est mes codes actuels.

CONTRÔLEUR

@users = User.confirmed.joins(:profile).page(params[:page]).order('profiles.total_point DESC') 

VIEW

<% @users.each do |user| %> 
    <tr> 
     Username: <%= user.username %> <br /> 
     Total Point: <%= user.profile.total_point %> <br /> 
     Gender: <%= user.profile.gender.data %> <br /> 
     Country: <%= user.profile.country.data %> <br /> 
     Prefecture: <%= user.profile.prefecture.data %> <br /> 
     The number of the cars that the user owns: <%= user.cars.count %> <br /> 
    </tr>   
<% end %> 
+0

Pourquoi le genre est-il un modèle distinct? Il n'y aura pas de nouveaux genres demain. Il devrait juste être un attribut de l'utilisateur à mon avis. – Mischa

+0

parce que je le veux comme le nombre (entier) pour résumer l'objectif de performance – HUSTEN

+1

Donc, juste stocker '0' ou' 1' dans votre colonne 'gender' et créer une constante' GENDERS' pour mapper votre entier à un genre. 'GENDERS = {0 => 'male', 1 => 'female'}' Cela n'a aucun sens de créer une table de base de données pour les données qui ne changent jamais. Cela rendra vos requêtes plus faciles et plus rapides. – Mischa

Répondre

1

Mise à jour

Je pense, vous devriez essayer cette approche:

@users = User.includes(:cars, profile: [:gender, :country, :prefecture]).confirmed.page(params[:page]).order('profiles.total_point DESC') 

Cela fonctionne-t-il?

+0

pourriez-vous s'il vous plaît personnaliser mon code d'origine dans le contrôleur? Je ne peux pas comprendre comment ajouter votre code à mon original – HUSTEN

+0

Qu'en est-il du modèle 'car'? vous ne pouvez pas ajouter cela au code? – HUSTEN

+1

@users = Utilisateur.include (: voitures, profil: [: sexe,: pays,: préfecture]). Page (params [: page]). Order ('profiles.total_point DESC') Cela fonctionne-t-il? – hedgesky

Questions connexes