Определить вложенные has_many и own_to - PullRequest
0 голосов
/ 23 января 2019

Предположим, у меня есть 3 модели: A, B и C (где A имеет много B, а B имеет много C):

class A < ActiveRecord::Base
  has_many :bs
end

class B < ActiveRecord::Base
  belongs_to :a
  has_many :cs
end

class C < ActiveRecord::Base
  belongs_to :b
end

Так что здесь все отлично работает. С A.first.bs я получаю все экземпляры B, связанные с первым экземпляром A, с C.last.b я получаю экземпляр B, связанный с последним экземпляром C и т. Д.

Но если я хочу быть в состоянии сделать A.first.cs и C.last.a, как я могу это сделать?

Я хочу сделать это, потому что я хочу быть в состоянии сделать C.all.joins(:a), потому что я хочу построить некоторую статистику об экземплярах C, сгруппированных по A. Есть ли другой способ сделать то же самое?

1 Ответ

0 голосов
/ 23 января 2019

Просто создайте косвенные ассоциации , которые пересекают дерево.

class A < ApplicationRecord
  has_many :bs
  has_many :cs, through: :bs
end

class B < ApplicationRecord
  belongs_to :a
  has_many :cs
end

class C < ApplicationRecord
  belongs_to :b
  has_one :a, through: :b
end

Это отпустит вас с любого конца:

A.first.cs
C.last.a 
# etc

ActiveRecord автоматически присоединится к промежуточной модели (B).

...