บางครั้งคุณต้องการใช้ชื่ออื่นสำหรับการเชื่อมโยงที่แตกต่างกัน หากชื่อที่คุณต้องการใช้สำหรับการเชื่อมโยงในแบบจำลองนั้นไม่เหมือนกับการตั้งค่าใน:through
แบบจำลองคุณสามารถใช้:source
เพื่อระบุ
ฉันไม่คิดว่าย่อหน้าด้านบนมีความชัดเจนยิ่งกว่าหนึ่งในเอกสารดังนั้นนี่เป็นตัวอย่าง สมมติว่าเรามีสามรุ่นPet
, และDog
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
ในกรณีนี้เราได้เลือกเนมสเปซ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
) และการใช้งานที่