Rails视图表以显示另一个模型的值

时间:2017-03-28 11:40:22

标签: ruby-on-rails forms html-table views

我在视图中有<table>,但它显示了其他模型的用户名 - Profile。我正在为表格的每一行调用配置文件。这有两个问题:通过调用它来展示我的模型&amp;每次调用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>

非常感谢。我是铁杆的新手,没有找到任何例子。

2 个答案:

答案 0 :(得分:1)

开始不做

Profile.find_by_user_id(e_application.user_id).full_name

如果你正确地做了关系,请致电

e_application.user.full_name

如果您不总是有用户

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

使用它,这样你就不会收到错误。

单点符号总是很好但是对于这个例子,不需要复杂化。

答案 1 :(得分: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>