有时,您想为不同的关联使用不同的名称。如果要用于模型上关联的名称与: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