gpt4 book ai didi

ruby-on-rails - 需要有关 Rails 中的多态连接表的帮助

转载 作者:数据小太阳 更新时间:2023-10-29 08:34:59 27 4
gpt4 key购买 nike

你好,我正在尝试将两个实体链接到一个实体,即管理机构、房地产和 repo_document,然后一个管理机构可以拥有 repo_document,而房地产也可以拥有,所以我决定创建一个名为 document_owner 的连接表。但是我不知道在他们的模型中写什么..我在我的 document_owner 模型中有这段代码..

belongs_to :repo_document
belongs_to :estate, :through => :repo_document, :foreign_key => :owner_id, :conditions => "owner_type = 'Estate'"
belongs_to :governing_body, :through => :repo_document, :foreign_key => :owner_id, :conditions => "owner_type = 'GoverningBody'"
belongs_to :owner, :polymorphic => true

还有这个在我的 repo_document 中

 has_and_belongs_to_many :owners, :join_table => :document_owners, :conditions =>     "owner_type = 'Estate' OR owner_type = 'GoverningBody'"

还有这个在我家

has_many :repo_documents, :source => :document_owners, :foreign_key => :owner_id, :conditions => "owner_type = 'Estate' "

还有这个在我的 governing_body 中

has_many :repo_documents, :source => :document_owners, :foreign_key => :owner_id, :conditions => "owner_type = 'GoverningBody' "

但是当我尝试保存时,它不会在连接表中保存任何内容..

谁能帮帮我

最佳答案

作为建议,我认为多态连接表是一个非常糟糕的主意,除非绝对必要,否则应该避免使用。它们不仅很难正确索引,而且会使涉及它们的每个查询都变得更加复杂,并且更难扩展。理想情况下,您拥有的任何多态关联永远不会用于将两个表连接在一起。

此外,不推荐使用 has_and_belongs_to_many,在大多数情况下使用 has_many :through 是更好的解决方案。

简化这一过程的一种方法是将您的 Estate 和 GoverningBody 模型合并到一个表中,也许使用 STI 来区分两者。这样文档和这个特定实体之间的关系就更加明显了。

如果这不切实际,那么最好使用两个直接连接表而不是多态连接表。

多态关联最适合一对多的随意关系。例如:

class Example < ActiveRecord::Base
# This model has notes
has_many :notes, :as => :record
end

class Note
# Can be attached to any kind of record
belongs_to :record, :polymorphic => true
end

在这种情况下,注释是可以附加到任何类型记录的东西。重要的是,它不在关系的中间使用,它是一个终点。

关于ruby-on-rails - 需要有关 Rails 中的多态连接表的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1443736/

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