нет неявного преобразования Symbol в Integer, пытаясь перечислить определенных пользователей - PullRequest
0 голосов
/ 22 января 2019

Я имею дело с основными пользователями (учителями) и их учениками. Они разделяют пользователя id и студента teacher_id. Я хочу перечислить всех учеников, у которых teacher_id совпадает с id текущего пользователя, чтобы пользователь мог видеть всех своих учеников. Это мой код:

<% @students = Student.all %>
<% if @students[:teacher_id] == @current_user.id %>
<% @students.each do |students| %>
  Username: <%= students.username %><br/>
  Name:  <%= students.name %><br/>
<% end %>
<% end %>

И я получаю следующую ошибку:

нет неявного преобразования символа в целое число

Что происходит? Логика кажется разумной: если teacher_id совпадает с идентификатором current_user, выведите студентов.

1 Ответ

0 голосов
/ 22 января 2019

Вы звоните [:teacher_id] на @students, что является ActiveRecord отношением.Вы можете думать об этом как о массиве.Лучше позвонить этому отдельному студенту, переместив if внутри итерации:

<% @students = Student.all %>
<% @students.each do |student| %>
  <% if student[:teacher_id] == @current_user.id %>
    Username: <%= student.username %><br/>
    Name:  <%= student.name %><br/>
  <% end %>
<% end %>

Есть некоторые улучшения, которые вы можете сделать:

  1. Не вызывать Active Recordзапрос (Student.all), переместите его в контроллер.
  2. Фильтруйте в запросе AR, а не в приложении: Student.where(teacher_id: @current_user.id) вместо Student.all и проверьте значение хеш-функции.

Наконец-то вы получите

# controller:
@students = Student.where(teacher_id: @current_user.id)

# view:
<% @students.each do |student| %>
    Username: <%= student.username %><br/>
    Name:  <%= student.name %><br/>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...