Ruby on rails 根据条件,急切地加载所有对象的一小部分会有许多对象

Ruby on rails 根据条件,急切地加载所有对象的一小部分会有许多对象,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,如何仅加载has\u many关系中的一些对象 基本上,我有四个对象:Assignment,Problem,AssignmentUser,和ProblemUser #assignment.rb has_many :problems has_many :assignment_users #assignment_user.rb belongs_to :assignment belongs_to :user has_many :problem_users #problem.rb belongs_t

如何仅加载has\u many关系中的一些对象

基本上,我有四个对象:
Assignment
Problem
AssignmentUser
,和
ProblemUser

#assignment.rb
has_many :problems
has_many :assignment_users

#assignment_user.rb
belongs_to :assignment
belongs_to :user
has_many :problem_users

#problem.rb
belongs_to :assignment
has_many :problem_users

#problem_user.rb
belongs_to :user
belongs_to :problem
belongs_to :assignment_user
attr_accessor :complete #boolean
在显示单个作业的页面上,我想显示所有问题,以及每个问题(如果存在)的用户状态。(如果这是用户第一次查看页面,则可能不是。)

我不能调用
assignment\u user.problem\u users
,然后像这样把问题解决掉:

-@assignment_user.problem_users.each do |problem_user|
    = check_box_tag "problems[#{problem_user.problem.id}]", 1, problem_user.complete
    = link_to problem_user.problem.name, assignment_problem_path(assignment_id => problem_user.problem.assignment_id, :id => problem_user.problem_id)
因为对于属于分配的每个
问题
,可能不存在
ProblemUser
条目;每当有人创建一个
问题
对象时,创建所有这些
ProblemUser
对象都是浪费,因此它们只是动态创建的


我想要的是能够迭代属于特定
分配的
问题
,然后针对每个
问题
,找到一个匹配的
问题用户
,但不产生N+1问题。我可以创建两个阵列,一个包含所有问题,另一个包含所有问题用户,但我必须将它们匹配起来,对吗?也许这是最好的方法。。。但是这里非常感谢您对最佳实践的任何建议。

尝试使用:包括一些与

#assignment.rb
has_many :problems, :include => :problem_user
has_many :assignment_users
假设在每个表Assignment、problems和problems_users中都有一个名为description的字段,那么解决方案应该类似于

Assignment.find(1).problems.collect { |a| [a.assignment.description, a.description, a.problem_user.description] }