Bazen, farklı ilişkilendirmeler için farklı adlar kullanmak istersiniz. Modeldeki bir ilişkilendirme için kullanmak istediğiniz ad, modeldeki ilişkilendirmeyle aynı değilse, belirtmek için :throughkullanabilirsiniz :source.
Yukarıdaki paragrafın dokümanlardakinden çok daha net olduğunu düşünmüyorum, işte bir örnek. Diyelim ki üç modelimiz var Pet, Dogve Dog::Breed.
class Pet < ActiveRecord::Base
has_many :dogs
end
class Dog < ActiveRecord::Base
belongs_to :pet
has_many :breeds
end
class Dog::Breed < ActiveRecord::Base
belongs_to :dog
end
Bu durumda, güzel ve kullanışlı bir dernek olarak Dog::Breederişmek istediğimiz için ad alanını seçtik Dog.find(123).breeds.
Şimdi, şimdi bir has_many :dog_breeds, :through => :dogsilişki kurmak istiyorsak Pet, aniden bir sorunumuz var. Rails bir :dog_breedsilişkilendirme bulamaz Dog, bu nedenle Rails hangi Dog ilişkilendirmeyi kullanmak istediğinizi bilemez . Şunu girin :source:
class Pet < ActiveRecord::Base
has_many :dogs
has_many :dog_breeds, :through => :dogs, :source => :breeds
end
İle :sourcebizler söyleme etmek Raylar, adında bir dernek aramaya :breedsüzerine Dogmodelin (bunu engellemek için kullanılan model olarak :dogso ve kullanım).