บางครั้งคุณต้องการใช้ชื่ออื่นสำหรับการเชื่อมโยงที่แตกต่างกัน หากชื่อที่คุณต้องการใช้สำหรับการเชื่อมโยงในแบบจำลองนั้นไม่เหมือนกับการตั้งค่าใน:throughแบบจำลองคุณสามารถใช้:sourceเพื่อระบุ
ฉันไม่คิดว่าย่อหน้าด้านบนมีความชัดเจนยิ่งกว่าหนึ่งในเอกสารดังนั้นนี่เป็นตัวอย่าง สมมติว่าเรามีสามรุ่นPet, และDogDog::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
ในกรณีนี้เราได้เลือกเนมสเปซDog::Breedเนื่องจากเราต้องการเข้าถึงDog.find(123).breedsการเชื่อมโยงที่ดีและสะดวกสบาย
ตอนนี้ถ้าเราต้องการสร้างความhas_many :dog_breeds, :through => :dogsสัมพันธ์Petเราก็มีปัญหา ทางรถไฟจะไม่สามารถที่จะหา:dog_breedsการเชื่อมโยงบนDogดังนั้นทางรถไฟไม่อาจรู้ที่ Dogเชื่อมโยงคุณต้องการที่จะใช้ ใส่:source:
class Pet < ActiveRecord::Base
has_many :dogs
has_many :dog_breeds, :through => :dogs, :source => :breeds
end
ด้วย:sourceเรากำลังบอกทางรถไฟที่จะมองหาการเชื่อมโยงที่เรียกว่า:breedsในDogรูปแบบ (เป็นที่รุ่นที่ใช้สำหรับการ:dogs) และการใช้งานที่