gpt4 book ai didi

ruby-on-rails - 如何在 Rails 中管理没有 id 的表?

转载 作者:行者123 更新时间:2023-12-03 15:29:06 28 4
gpt4 key购买 nike

我有两个模型:Person 和 Relation。第二个存储有关两个人之间关系的信息。它有 parent_id 和 child_id 字段,没有 id 字段。我将它与 has_many :through 连接起来,它起作用了。

但是:

  1. Relation.find(:all) 返回空数组,即使表中有一些关系(因为没有 id 字段)。
  2. 我不知道如何删除关系。

我的模型是这样的:

class Person < ActiveRecord::Base
has_many :child_relations,
:class_name => "Relation",
:foreign_key => "parent_id"
has_many :parent_relations,
:class_name => "Relation",
:foreign_key => "child_id"

has_many :children, :through => :child_relations
has_many :parents, :through => :parent_relations
end

class Relation < ActiveRecord::Base
belongs_to :parent, :class_name => "Person"
belongs_to :child, :class_name => "Person"
end

有什么建议吗?

更新:我使用了 has_many :through 因为我还在表中存储了关于一种关系类型的信息。目前我放弃了,我将 id 字段添加到我的表中(Rails 约定......)。但我的问题仍然悬而未决。

最佳答案

has_many :through 取决于连接表中的一个 id。它使连接表成为一个完整的模型。由于每个记录操作都使用一个 id,如果没有它,您将无法直接与表交互。当您删除记录时,rails 会生成 sql 以通过其 id 删除记录。 如果您有一个充当完整模型的连接表,它必须有一个 id

或者您可以使用 has_and_belongs_to_many,它的效果更符合您的预期。删除关系是通过对象的关联而不是直接通过关系模型删除对象。

最好的办法是向连接表添加一个 ID。这样,将来如果关系模型变得更加复杂,您可以将其作为自己的实体进行跟踪。

关于ruby-on-rails - 如何在 Rails 中管理没有 id 的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/522408/

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