如何查看模型之间的所有相关数据

时间:2013-07-24 12:53:42

标签: ruby-on-rails ruby-on-rails-3.2

我花了一段时间寻找这个,但我不确定如何问我想知道什么,我认为这是我最大的问题: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 

感谢您的帮助!

3 个答案:

答案 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