呈现仅属于rails中特定帐户的用户列表。

时间:2015-04-20 14:29:49

标签: ruby-on-rails associations

我正在使用权威建立一个具有多级权限/访问权限的应用程序。我的用户具有管理员,教师和学生的角色。

我为管理员提供了创建课堂的能力,他们需要为该课堂选择教师。选择器应仅列出与该学校不同的教师(用户)。问题是,它列出了数据库中具有教师角色的所有用户。

如何只展示属于该学校的教师?

这是表格

   <% 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 个答案:

答案 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方法。我想这种方法并不能满足您的需求。

我认为这是您可能遇到错误的地方,您可以通过添加用户模型来编辑帖子以确定吗?