Отображение списка пользователей, принадлежащих только определенной учетной записи в rails.


Я создаю приложение с несколькими уровнями разрешений / доступа, используя pundit. У меня есть пользователи с ролями администратора, учителя и ученика.

Я даю администраторам возможность создать класс, и в этой форме им нужно выбрать учителя для этого класса. Селектор должен перечислять только учителей (пользователей), которые находятся отдельно от этой школы. Проблема в том, что он перечисляет всех пользователей в базе данных с ролью учителя.

Как мне показать только учителям, что принадлежишь к этой школе?

Вот форма

   <% if user.school.teachers %>
        <div class="form-group">
          <%= f.label :teacher_id %>
          <%= f.text_field :teacher_id, class: "form-control" %>
        </div>
    <% end %>

Вот моя школьная модель

class School < ActiveRecord::Base
    has_many :users
    has_many :classrooms

validates_uniqueness_of :code

    def students
      self.users.students
    end

    def teachers
       self.users.teachers
    end

    def admins
       self.users.admins
    end
end

Модель класса

class Classroom < ActiveRecord::Base

belongs_to :school
belongs_to :teacher, :class_name => "User"
has_and_belongs_to_many :users

has_many :pins
has_many :reflections


validates_presence_of :school
validates_presence_of :teacher
validates :code, :uniqueness => { :scope => :school_id }


end 
2 2

2 ответа:

Чтобы расширить ответ Калибу, в контроллере для класса вызовите метод учителя, чтобы передать список в представление.

def new
  @school = School.find(params[:id])
  @teachers = @school.teachers
end

Тогда для вашей формы:

<% if @teachers.present? %>
  <div class="form-group">
    <%= f.collection_select(:teacher_id, @teachers, :id, :name) %>
  </div>
<% end %>

Проверьте collection_selectздесь в документах.

Вот что я понимаю о вашей проблеме:

В вашей модели школы, self.users перечисляет всех пользователей, которые принадлежат к школе. Поэтому нам нужно, чтобы получить только учителей, отфильтровать этот список, сказав: "Я хочу только пользователей со статусом учителя".

Поэтому, когда вы пишете self.user.teachers, он ищет Метод teachers в вашей пользовательской модели. И я думаю, что этот метод не делает того, что вы хотите.

Я думаю, что здесь у вас может быть ошибка, вы можете отредактировать свой пост, добавив свою пользовательскую модель в чтобы быть уверенным ?