2017-03-28 1 views
0

보기에는 <table>가 있지만 다른 모델의 사용자 이름은 Profile입니다. 테이블의 각 행에 대해 Profile을 호출하고 있습니다. 이 문제에는 두 가지 문제가 있습니다. 비효율적 인 Profile을 호출 할 때마다 &으로 전화하여 모델을 표시합니다.레일 뷰 - 다른 모델의 값을 표시 할 테이블

하나의 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 

전화 오류가 발생하지 않습니다.

단일 점 표기법은 항상 좋지만이 예제에서는 사물을 복잡하게 만들 필요가 없습니다.

+0

감사합니다. Sedad. user 테이블에는 full_name이없고 profile 테이블에는 full_name 만 있습니다. 각 응용 프로그램의 사용자 이름을 얻으려면 e_application.user가 도움이되지 않습니다. 프로필 배열에있는 모든 사용자 이름을 수집 한 다음 매핑 할 수 있습니까? – Means

0

우선 직원 목록에 profile 테이블을 포함 시키십시오.

예 :

나는 가정하고 그

직원

belongs_to :user 

사용자가 다음

has_one :profile 

,

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

단순히 다음과 같이 표시합니다

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

Thx, Chakreshwar하지만 사용자 프로필에 포함하는 방법을 따르지 않았습니다 ... employee는 사용자의 열거 형 역할입니다. – Means

+0

귀하의 컨트롤러 코드와 모델을 붙여 넣으십시오 –

+0

배열에서 해시 쿼리를 사용하거나 e_application 컨트롤러에서 해시를 사용하여 프로필에서 모든 full_name을 (를) 얻을 수 있는지 확실하지 않습니다. 배열/해시를 사용하여 각 테이블 행에 매핑하십시오. 그리고 내가 표시 할 때 user_id를 키로 사용하여 테이블 행의 해시 값을 매핑해야합니다. 표시 할 부분이 해시에서 가져 오기 복잡해 보입니다. 어떤 아이디어 – Means

관련 문제