как написать каждый цикл для has_many в рельсах? - PullRequest
0 голосов
/ 20 июня 2019

сотрудник обладает многими навыками и навыками принадлежит сотруднику. has_many

Таблица навыков имеет идентификатор сотрудника (внешний ключ).

Я хочу отобразить в виде

Ответы [ 4 ]

1 голос
/ 20 июня 2019

В этом случае рекомендуется писать метод экземпляра для вашего 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>
1 голос
/ 20 июня 2019

Вы можете попробовать что-то вроде этого.В 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 %>
1 голос
/ 20 июня 2019

Существует 4 способа получения коллекций пользователей.

  1. @ employee = Employee.all.joins (: навыки)
  2. @ employee = Employee.all.includes (: навыки)
  3. @ employee = Employee.all.eager_load (: навыки)

По вашему мнению, добавьте следующий код в файл HTML / HAML / SLIM.

<% @employees.each do |employee| %>
   <tr>
    <td><%= employee.name %></td>
    <td><%= employee.skills.map(&:title).join(", ") %></td>
  </tr>
<% end %>`
1 голос
/ 20 июня 2019

Вы можете использовать:

<table>
  <tr>
   <th>Employee </th>
   <th>Skills</th>
  </tr>
  <% @employees.each do |employee|%>
    <tr>
       <td><%= employee.name %></td>     
       <td><%= employee.skills.map(&:name).join(', ') %></td>     
    </tr>
   <% end %>
</table>

В приведенном выше коде будут перечислены все имена умений каждого сотрудника. Вы можете прочитать полное руководство здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...