有時,您想爲不同的關聯使用不同的名稱。如果要用於模型上關聯的名稱與: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
作爲一個很好的和方便的聯繫。
現在,如果我們現在要在Pet
上創建has_many :dog_breeds, :through => :dogs
關聯,我們突然出現問題。 Rails將無法在Dog
上找到:dog_breeds
關聯,所以Rails不可能知道哪個Dog
關聯要使用。輸入:source
:
class Pet < ActiveRecord::Base
has_many :dogs
has_many :dog_breeds, :through => :dogs, :source => :breeds
end
隨着:source
,我們告訴滑軌連接到尋找一個關聯的Dog
模型(因爲這是用於:dogs
模型)稱爲:breeds
,並使用它。
謝謝。更清楚的是 – Anwar 2015-09-20 18:08:32
請注意,單數模型名稱應該在`:source =>`中使用,而不是複數形式。所以,`:users`是錯誤的,`:user`是正確的 – Anwar 2015-10-18 14:04:20