Как я могу загружать только некоторые объекты в отношениях has_many?нетерпеливо загружает небольшое подмножество всех объектов has_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_user.problem_users
, а затем змея проблемы из так как:
-[email protected]_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
записей за каждые Problem
, относящихся к заданию; создавая все те объекты ProblemUser
, когда кто-то создает объект Problem
, будет расточительным, поэтому они создаются только на лету.
То, что я хочу, чтобы иметь возможность перебрать Problems
, которые принадлежат к конкретному Assignment
, то для каждого Problem
, найти ProblemUser
, который соответствует ... но без создания N + 1 проблема. Я мог бы создать два массива, один со всеми проблемами и один со всеми проблемными пользователями, но тогда мне пришлось бы их сопоставлять, правильно? Возможно, это лучший способ ... но любые рекомендации по лучшим методам оцениваются здесь.