Witam koledzy i koleżanki,
Czy mógłbym Was poprosić o pomoc i dokładne wytłumaczenie asocjacji “has_many through” z przykładu M.Hartla.
Oczywiście rozumiem jak działa asocjacja jeden do jednego, jeden do wielku czy wiele do wielu ale przerabiając materiał z książki Hartla doszedłem do ostatniego rozdziału i chyba nie do końca rozumiem co się tam dzieje.
Przykład tłumaczy asocjację między modelem User i Relationship czyli twitterowy following/followed.
class User < ApplicationRecord
has_many :active_relationships, class_name: "Relationship",
foreign_key: "follower_id",
dependent: :destroy
has_many :passive_relationships, class_name: "Relationship",
foreign_key: "followed_id",
dependent: :destroy
has_many :following, through: :active_relationships, source: :followed
has_many :followers, through: :passive_relationships, source: :follower
.
.
.
end
class Relationship < ApplicationRecord
belongs_to :follower, class_name: "User"
belongs_to :followed, class_name: "User"
end
Czy :active_relationships, :passive_relationships, :following, :followers traktowane są jakie jakieś wirtualne modele?
Nie bardzo rozumiem skąd się to wzięło i jak to sobie poukładać w głowie.
Przeczytałem, jak mi się wydaje, ze zrozumieniem http://guides.rubyonrails.org/association_basics.html i jedyne co mogło by mi pasować do tego przykładu to “Self Joins” ale te asocjajce nie są wykonywane na tym samym modelu.
Czy ktoś będzie tak uprzejmy i wytłumaczy mi, jak mam to rozumieć.
Z góry dziękuję za pomoc.