【问题标题】:how to view all associated data among models如何查看模型之间的所有关联数据
【发布时间】:2013-07-24 12:53:41
【问题描述】:

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

我有以下数据模型:

用户

has_many :student_groups, dependent: :destroy

学生组

belongs_to :user
has_many   :students, dependent: :destroy

学生

belongs_to :student_group

我想查看所有给定用户的 student_groups 中的所有学生 - 如何执行此操作?目前,我的students#index路线如下:

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

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

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

感谢您的帮助!

【问题讨论】:

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


【解决方案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)

【讨论】:

    【解决方案2】:

    现在我为你想出了一个更好的选择,你可以使用 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
    

    它看起来会更干净。谢谢

    【讨论】:

    • 看看我刚刚发的this question
    • 这是在这三个模型中定义关系的最佳方式。
    • 抱歉,哪种方式 - 您所说的方式,是nowthis 方式?
    【解决方案3】:

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

    @students = []
    @user.student_groups.each |sg|
      @students << sg.students
    end
    

    【讨论】:

    • 我现在有这个 - 它有效 - 问题是它返回给定学生组中的所有学生。我想要的是他或她的所有学生组中属于该用户的所有学生
    • @dax as student 属于 student_group,其中所有学生都属于一个用户。你的问题有什么遗漏吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多