2012-07-17 4 views
0

J'ai 3 modèles, Génotype, Gmarkers et Gsamples, associés de la manière suivante:Quel est le meilleur moyen d'afficher les données associées?

class Genotype < ActiveRecord::Base 
    attr_accessible :allele1, :allele2, :run_date 
    belongs_to :gmarkers 
    belongs_to :gsamples 
end 

class Gmarker < ActiveRecord::Base 
    attr_accessible :marker 
    has_many :genotypes, :dependent => :delete_all 
end 

class Gsample < ActiveRecord::Base 
    attr_accessible :box, :labid, :subjectid, :well 
    belongs_to :gupload 
    has_many :genotypes, :dependent => :delete_all 
end 

Quand j'afficher une liste des Gentypes (en index.html.erb), j'afficher les données connexes de la manière suivante:

<% @genotypes.each do |f| %> 
    <tr>  
    <td><%= Gmarker.find(f.gmarkers_id).marker %></td> 
    <td><%= Gsample.find(f.gsamples_id).labid %></td> 
    <td><%= f.allele1 %></td> 
    <td><%= f.allele2 %></td> 
    <td><%= f.run_date %></td> 
    <td><%= link_to 'Show', f %></td> 
    <td><%= link_to 'Edit', edit_genotype_path(f) %></td> 
    <td><%= link_to 'Destroy', f, confirm: 'Are you sure?', method: :delete %></td> 
    </tr> 
<% end %> 

Cependant, la page prend un certain temps à charger, alors je me demande s'il y a un moyen plus facile d'afficher les données associées sans faire deux par boucle lookups. Je ne pouvais pas obtenir toutes les données associées à apparaître en utilisant le style intégré Rails de référence de quelque chose comme:

f.GMarker.first.marker 

Mais chaque fois que j'essaie que dans la console, je reçois un tas d'erreurs en commençant par

NameError: uninitialized constant Genotype::Gmarkers 

Je ne sais comprends pas la console lactosérum ne pas Gmarkers, car il y a un à plusieurs entre dans leurs modèles ....

Toute aide très appréciée!

--Rick

Répondre

0

Dans votre classe génotypique, changer votre déclaration de belongs_to à:

belongs_to :gmarker 
    belongs_to :gsample 

alors votre point de vue (index.html.erb), remplacer le code suivant:

<td><%= Gmarker.find(f.gmarkers_id).marker %></td> 
<td><%= Gsample.find(f.gsamples_id).labid %></td> 

avec celui-ci:

<td><%= f.gmarker.marker %></td> 
<td><%= f.gsample.labid %></td> 
Questions connexes