Rails:控制器,让教师只能看到他的学生发布的帖子

时间:2015-11-16 15:06:42

标签: ruby-on-rails

目前我有一个教师控制器,让老师看到所有学生的帖子。

def index
  if params[:user_id]
    @posts = Post.where(user_id: params[:user_id])
  else
    @posts = Post.all
  end
end

您如何让教师只看到学生的帖子,而不是让有不同教师的学生发帖?我正在使用设计。

这就是我对教师控制员所拥有的:

class TeachersController < ApplicationController
  before_action :set_post, only: [:show, :edit, :update, :destroy]


def index
  if params[:user_id]
   @posts = Post.where(user_id: params[:user_id])
 else
    @posts = Post.all
  end

end

end

1 个答案:

答案 0 :(得分:1)

如果没有关于您的关联或身份验证的任何信息,我将通过做出以下假设来回答:

  1. 帖子属于学生,学生有__帖子
  2. 学生属于老师,老师有很多学生
  3. 老师是当前用户
  4. 将帖子限制为教师的最简单方法是定义其他ActiveRecord关联。在Teacher类中,您可以添加:

    has_many :student_posts, through: :students, source: :posts
    

    在您的控制器中,您可以执行以下操作:

    class TeacherController
    
      before_action :find_teacher, only: [:index]
    
      def index
        @posts = @teacher.student_posts
      end
    
      private
    
      def find_teacher
        @teacher = current_user
      end 
    end
    

    ActiveRecord只会返回属于给定教师的学生的帖子。请注意,这是一个概念图,并不意味着通过复制和粘贴。