Отображение списка пользователей, принадлежащих только определенной учетной записи в 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 ответа:
Чтобы расширить ответ Калибу, в контроллере для класса вызовите метод учителя, чтобы передать список в представление.
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
в вашей пользовательской модели. И я думаю, что этот метод не делает того, что вы хотите.Я думаю, что здесь у вас может быть ошибка, вы можете отредактировать свой пост, добавив свою пользовательскую модель в чтобы быть уверенным ?