注意 - 为了不引起混淆,问题中的方法有效,但要小心使用"s"
' s在您的命名约定中。
我试图在班级A
和班级B
之间建立两对多的关系。
方法
class A < ActiveRecord::Base
has_many :relationship_a
has_many :b, through: :relationship_a
has_many :relationship_b
has_many :other_b, through: :relationship_b, source: :b
end
class B < ActiveRecord::Base
has_many :relationship_a
has_many :a, through: :relationship_a
has_many :relationship_b
has_many :other_a, through: :relationship_b, source: :a
end
关系
class RelationshipA < ActiveRecord::Base
belongs_to :A
belongs_to :B
end
class RelationshipB < ActiveRecord::Base
belongs_to :A
belongs_to :B
end
这就是发生的事情:
2.1.2 :001 > B.new.otherA
ActiveRecord::HasManyThroughSourceAssociationNotFoundError: Could not find the source association(s) :A in model OtherA. Try 'has_many :otherA, :through => :relationshipB, :source => <name>'. Is it one of :A or :B?
如果有人质疑我在同一个班级之间有多对多关系背后的逻辑,那么请做。
我有两个对象,A和B.我有一个A的主要集合,其中没有任何重复。然后,我有一系列不断维护的B&B,但同样没有重复。 B可以在一个关系下拥有许多A,但可以有重叠; B1和B2都可以有A1,A2和A3。然后在第一个关系中有一个子集合,其中B1可以&#34;选择&#34;原始示例列表中的A1和A3以及B2可以选择&#34; A2和A3。这是假设B1和B2只知道A1-3,并且无法选择该范围之外的任何东西。
有了这个场景,我唯一的结论就是在同一个对象上有两个关系,因为能够选择B1中的A1然后选择B2,这也不是预期的功能。
请质疑我的逻辑!