我正在使用权威建立一个具有多级权限/访问权限的应用程序。我的用户具有管理员,教师和学生的角色。
我为管理员提供了创建课堂的能力,他们需要为该课堂选择教师。选择器应仅列出与该学校不同的教师(用户)。问题是,它列出了数据库中具有教师角色的所有用户。
如何只展示属于该学校的教师?
这是表格
<% 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
答案 0 :(得分:1)
要扩展Calibou的答案,请在教室的控制器中,调用您的教师方法将列表传递给视图。
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 here。
答案 1 :(得分:0)
以下是我对您的问题的理解:
在您的学校模型中,self.users
列出了属于某所学校的所有用户。因此,我们需要通过说“我只希望用户具有教师身份”来过滤此列表。
因此,当您编写self.user.teachers
时,它会在您的用户模型中查找teachers
方法。我想这种方法并不能满足您的需求。
我认为这是您可能遇到错误的地方,您可以通过添加用户模型来编辑帖子以确定吗?