我花了一段时间寻找这个,但我不确定如何问我想知道什么,我认为这是我最大的问题:p
我有以下数据模型:
用户
has_many :student_groups, dependent: :destroy
Student_Group
belongs_to :user
has_many :students, dependent: :destroy
学生
belongs_to :student_group
我希望查看所有给定用户的student_groups中的所有学生 - 如何执行此操作?目前,我的学生#index route如下:
student_group_students GET /student_groups/:student_group_id/students(.:format) students#index
学生#index似乎是放置这个的合理位置,但它也需要一个student_group_id - 这意味着它只是给定student_group中学生的索引。根据我的代码,这是有道理的,但有没有办法覆盖学生#index视图?例如,在学生控制器中的学生#index action中,类似于:
def index
@students = @student_group.all.students
...
end
感谢您的帮助!
答案 0 :(得分:1)
试试这个
如果您要为特定用户检索学生,则需要通过网址发送用户ID。需要自定义routes.rb
@user_group_ids = User.find(params[:user_id]).student_groups.map(&:id)
@students = Student.where('student_group_id IN (?)', @user_group_ids)
否则,如果您要查找当前用户,则
@user_group_ids = current_user.student_groups.map(&:id)
@students = Student.where('student_group_id IN (?)', @user_group_ids)
答案 1 :(得分:1)
现在我想出了一个更好的选择,你可以使用has_many:通过关联:
User
has_many :student_groups, dependent: :destroy
has_many :students, through: :student_groups
Student_Group
belongs_to :user
has_many :students, dependent: :destroy
Student
belongs_to :student_group
现在,您将能够获得与任何给定用户的student_groups相关联的所有学生,如下所示:
@user = User.find(params[:user_id])
@user.students
它看起来会更清洁。感谢
答案 2 :(得分:0)
假设你有@user = User.find(params[:id])
而不是试试这个:
@students = []
@user.student_groups.each |sg|
@students << sg.students
end