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 :through
kullanabilirsiniz :source
.
Yukarıdaki paragrafın dokümanlardakinden çok daha net olduğunu düşünmüyorum, işte bir örnek. Diyelim ki üç modelimiz var Pet
, Dog
ve 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::Breed
erişmek istediğimiz için ad alanını seçtik Dog.find(123).breeds
.
Şimdi, şimdi bir has_many :dog_breeds, :through => :dogs
ilişki kurmak istiyorsak Pet
, aniden bir sorunumuz var. Rails bir :dog_breeds
iliş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 :source
bizler söyleme etmek Raylar, adında bir dernek aramaya :breeds
üzerine Dog
modelin (bunu engellemek için kullanılan model olarak :dogs
o ve kullanım).