gpt4 book ai didi

ruby-on-rails - 双多态关联

转载 作者:行者123 更新时间:2023-12-03 23:55:32 29 4
gpt4 key购买 nike

在我的 rails 应用程序中,我有两个模型:PersonCompany。我需要指定这些对象的任何对之间的多对多关系。所以我应该可以这样做:

@connections = @person.connections

其中 @connectionsPersonCompany 对象的数组。

现在我已经为此创建了 ConnectionBinding 模型,但它不能按预期工作:

class ConnectionBinding < ActiveRecord::Base
belongs_to :connect_from, polymorphic: true
belongs_to :connect_to, polymorphic: true
end

它认为 ActiveRecord::HasManyThroughAssociationPolymorphicSourceError 异常

有人已经解决了这个问题吗?任何建议表示赞赏。

最佳答案

您需要告诉 ActiveRecord 它正在寻找的关联列。我猜你想要以下内容:

class Person < ActiveRecord::Base
has_many :connection_bindings
has_many :companies, :through => :connection_bindings
has_many :people, :through => :connection_bindings
end

class company < ActiveRecord::Base
has_many :connection_bindings
has_many :companies, :through => :connection_bindings
has_many :people, :through => :connection_bindings
end

问题是您有两个表,将 id 放在一个列中,Rails 不知道要查找哪个表。

例如,在数据库中任何给定的 connection_binding 行上,connect_from 可以是 company_id 或 person_id,connect_to 也是如此。所以你说:'Hey Rails,加载我关联的 ConnectionBindings',它得到一行 connect_from 为 11,connect_to 为 12。但它是 Person.find(12) 还是 Company.find(12)?没办法说!

相反,您必须向 Rails 提供更多信息:

class Person < ActiveRecord::Base
has_many :connection_bindings
has_many :person_connections, :through => :connection_bindings, :source => :to_connect, :source_type => 'Person'
has_many :company_connections, :through => :connection_bindings, :source => :to_connect, :source_type => 'Company

def connections
person_connections + company_connections
end
end

您需要在另一端构建它(以及相关的 :from_connect),但这取决于您如何使用这些连接。应该足以让您入门。

它比您在 Ruby 和 Rails 的神奇世界中所习惯的要多得多,但您正在尝试构建一个非常复杂的数据模式。这并不意味着这是不可能的——Rails 作为一个优秀的框架,不会阻止你做任何你真正想做的事情——但它并不常见,需要你明确一些。

关于ruby-on-rails - 双多态关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15367098/

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