如何在rails中为has_many编写每个循环?

时间:2019-06-20 10:24:27

标签: ruby-on-rails

员工有很多技能 技能属于员工 has_many

技能表具有employee_id(外键)。

我想在视图中显示

4 个答案:

答案 0 :(得分:1)

您可以使用:

std::bind

上面的代码将列出每个员工的所有技能名称。 您可以阅读完整的指南here

答案 1 :(得分:1)

您可以尝试使用类似的方法。 在controller中返回所有employees 就像

@employees = Employee.all.includes(:skills)

,您可以在view

<% @employees.each do |employee| %>
  <tr>
     <td><%= employee.name %></td>
     <td><%= employee.skills.collect(&:title).join(", ") %></td>
  </tr>
<% end %>

答案 2 :(得分:1)

有四种获取用户集合的方法。

  1. @employees = Employee.all.joins(:skills)
  2. @employees = Employee.all.includes(:skills)
  3. @employees = Employee.all.eager_load(:skills)

在您看来,在HTML / HAML / SLIM文件中添加以下代码。

<% @employees.each do |employee| %>
   <tr>
    <td><%= employee.name %></td>
    <td><%= employee.skills.map(&:title).join(", ") %></td>
  </tr>
<% end %>`

答案 3 :(得分:1)

在这种情况下,最佳实践是在您的Employee类上编写实例方法:

class Employee < ApplicationRecord

  has_many :skills

  def skills_list
    skills.pluck(:title).join(', ')
  end
end

并在您的视图中像这样使用它:

<table>
  <tr>
    <td><%= @employee.id %></td>
    <td><%= @employee.name %></td>
    <td><%= @employee.skills_list %></td>
  <tr>
</table>