gpt4 book ai didi

ruby-on-rails-3 - 了解 :source option of has_one/has_many through of Rails

转载 作者:行者123 更新时间:2023-12-03 04:14:22 25 4
gpt4 key购买 nike

请帮助我理解 has_one/has_many :through 关联的 :source 选项。 Rails API 的解释对我来说意义不大。

"Specifies the source association name used by has_many :through =>
:queries
. Only use it if the name cannot be inferred from the association. has_many :subscribers, :through => :subscriptions will look for either :subscribers or :subscriber on Subscription, unless a :source is given. "

最佳答案

有时,您希望对不同的关联使用不同的名称。如果您要用于模型关联的名称与 :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 ,我们突然遇到一个问题。 Rails 将无法找到 :dog_breeds协会 Dog ,所以 Rails 不可能知道哪个 Dog您要使用的关联。输入:source :

class Pet < ActiveRecord::Base
has_many :dogs
has_many :dog_breeds, :through => :dogs, :source => :breeds
end

:source ,我们告诉 Rails 寻找名为 :breeds 的关联关于Dog model (因为这是 :dogs 使用的模型),并使用它。

关于ruby-on-rails-3 - 了解 :source option of has_one/has_many through of Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4632408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com