2017-03-28 161 views
0

我在視圖中有一個<table>,但它顯示來自另一個模型的用戶名 - Profile。我爲每個表格調用Profile。有兩個問題:通過每次調用效率低下的配置文件調用&來暴露我的模型。Rails視圖表顯示來自另一個模型的值

是否有一種方法可以首先訪問控制器中的所有用戶名,並使用一個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 

如果你沒有關係正確就叫

e_application.user.full_name 

如果客人不願意總有用戶

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

使用該如此你沒有得到錯誤。

單點符號總是很好,但在這個例子中,不需要使事情複雜化。

+0

謝謝Sedad。但用戶表不具有full_name,只有配置文件表具有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,但我沒有按照如何在用戶中包含配置文件...員工是用戶中的枚舉角色。 – Means

+0

粘貼您的控制器代碼和模型 –

+0

我不確定是否可以以某種方式使用數組中的where查詢或e_application控制器中的散列獲取所有full_name從配置文件中,並使用該數組/散列將其映射到每個錶行。並且,當我顯示時,我將不得不使用user_id作爲關鍵字將該散列值映射到錶行。要顯示的部分看起來很複雜,以從哈希中獲取。有任何想法嗎 – Means

相關問題