0

我花了一段时间寻找这个,但我不确定如何问我想知道的内容,我认为这是我最大的问题:p

我有以下数据模型:

用户

has_many :student_groups, dependent: :destroy

学生组

belongs_to :user
has_many   :students, dependent: :destroy

学生

belongs_to :student_group

我想查看所有给定用户的 student_groups 中的所有学生 - 怎么做?目前,我的学生#index路线如下:

student_group_students GET    /student_groups/:student_group_id/students(.:format)          students#index

student#index 似乎是放置这个的合乎逻辑的地方,但它也需要一个 student_group_id - 这意味着它只是给定 student_group 中学生的索引。根据我的代码,这是有道理的,但是有没有办法为学生#index 视图覆盖它?例如,在 student 控制器的 students#index 操作中,类似于:

def index
  @students = @student_group.all.students
  ...
end 

谢谢你的帮助!

4

3 回答 3

1

尝试这个

如果要检索特定用户的学生,则需要通过 url 发送用户 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)
于 2013-07-24T13:09:48.630 回答
1

现在我为你想出了一个更好的选择,你可以使用 has_many :through association :

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

它看起来会更干净。谢谢

于 2013-07-24T15:32:03.993 回答
0

假设你有@user = User.find(params[:id])比试试这个:

@students = []
@user.student_groups.each |sg|
  @students << sg.students
end
于 2013-07-24T12:57:57.263 回答