2017-03-28 5 views
0

ビューには<table>がありますが、別のモデルのユーザー名 - Profileが表示されています。私はテーブルの各行にProfileを呼んでいます。これには2つの問題があります。非効率なProfileを呼び出すたびに&と呼ぶことで、モデルを公開しています。他のモデルからの値を表示するためのビュービュー -

コントローラ内のすべてのユーザー名に1つのSQLクエリでアクセスし、それに応じて各値のみを表に表示する方法や、表なしで値を表示する方法がありますか?

  <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> 

多くのありがとう。私はレールが新しく、例は見つからなかった。

答えて

1

あなたが関係をした場合

Profile.find_by_user_id(e_application.user_id).full_name 

を行う `tを開始するために正しくちょうど

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

使用このため、ユーザあなたが常に持っている` tの場合

e_application.user.full_name 

を呼び出しますあなたはエラーになりません。

1つのドット表記は常に良好ですが、この例では複雑にする必要はありません。

+0

ありがとうSedad。 userテーブルにはfull_nameがなく、profileテーブルにはfull_nameしかありません。各アプリケーションのユーザー名を取得するには、e_application.userは役に立ちません。プロファイル配列内のすべてのユーザー名を収集してマップできますか? – Means

0

まず、profileテーブルを従業員リストに含めます。

たとえば、

私は、その後、

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

は、単に以下のように表示さ

従業員

belongs_to :user 

ユーザー

has_one :profile 

と仮定しています:

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

Thx、Chakreshwar、しかし私はユーザーにプロファイルを含める方法に従わなかった...従業員はユーザーの列挙型の役割です。 – Means

+0

あなたのコントローラコードとモデルを貼り付けてください –

+0

アレイのどこのクエリかe_applicationコントローラのハッシュを使ってプロファイルからすべてのfull_nameを取得し、その配列/ハッシュを使って各テーブル行にマップすることができるかどうかはわかりません。私が表示すると、user_idをキーとしてテーブル行のハッシュ値をマップする必要があります。表示される部分は、ハッシュからフェッチするように複雑に見えます。何か案は – Means

関連する問題