2017-03-28 1 views
0

J'ai un <table> dans une vue, mais il montre le nom d'utilisateur d'un autre modèle - Profile. J'appelle Profile pour chaque ligne de la table. Cela pose deux problèmes: exposer mon modèle en l'appelant & chaque fois que j'appelle Profile qui est inefficace.Rails vues-table pour afficher la valeur d'un autre modèle

Y at-il un moyen d'accéder à tous les noms d'utilisateur dans le contrôleur d'abord avec une requête SQL, puis afficher uniquement chaque valeur dans le tableau en conséquence ou une meilleure approche pour afficher les valeurs sans table?

  <table class="table table-bordered table-striped"> 
      <thead> 
      <tr> 
       <th> Applicant Name </th> 
       <th> Email </th> 
       <th> Documents </th> 
      </tr> 
      </thead> 
      <tbody> 
       <% employee.eager_load(:application).each do |e_application| %> 
       <tr> 
        <td><%= Profile.find_by_user_id(e_application.user_id).full_name %></td> 
        <td><%= mail_to(e_application.applicant.email) %></td> 
        <td><%= link_to e_application.doc.file.basename, e_application.doc_url if !eapplication.doc.file.nil? %></td> 
       </tr> 
       <% end %> 
      </tbody> 
      </table> 

Merci beaucoup. Je suis nouveau sur les rails et je n'ai trouvé aucun exemple.

Répondre

1

Pour commencer don `t faire

Profile.find_by_user_id(e_application.user_id).full_name 

Si vous avez des relations correctement il suffit d'appeler

e_application.user.full_name 

Si vous avez toujours don` t utilisateur

e_application.try(&:user).try(&:full_name) 

cette utilisation si vous n'avez pas d'erreur.

Les notations à un point sont toujours bonnes mais pour cet exemple, il n'est pas nécessaire de compliquer les choses.

+0

merci Sedad. mais la table utilisateur n'a pas de nom complet et seule la table de profil a un nom complet. Pour obtenir le nom d'utilisateur de chaque application, e_application.user n'aidera pas. puis-je collecter tous les noms d'utilisateur dans le tableau de profil et ensuite le mapper? – Means

0

Tout d'abord, incluez la table profile dans la liste des employés.

Par exemple.

Je suppose que

employé

belongs_to :user 

utilisateur

has_one :profile 

puis,

employee = Employee.includes(user: [:profile], :application).where(your condition) 

puis simplement afficher comme ci-dessous:

<% employee.each do |e_application| %> 
       <tr> 
        <td><%= e_application.user.profile.full_name %></td> 
+0

Thx, Chakreshwar mais je n'ai pas suivi comment inclure le profil dans l'utilisateur ... employé est un rôle enum dans l'utilisateur. – Means

+0

collez le code et les modèles de votre contrôleur –

+0

Je ne suis pas sûr qu'il soit possible d'obtenir tout le nom complet du profil en utilisant une requête where dans un tableau ou un hachage dans e_application controller et d'utiliser ce tableau/hash pour le mapper à chaque ligne de table. Et quand j'affiche, je vais devoir mapper cette valeur de hachage pour une ligne de table en utilisant user_id comme clé. La partie à afficher semble complexe à extraire du hachage. des idées – Means