如何在Rails中管理没有id的表?

我有两个模型:人和关系。 第二个存储有关两个人之间关系的信息。 它有parent_id和child_id字段,并且没有id字段。 我用has_many连接它:通过它可以工作。

但:

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

我的模型看起来像这样:

class Person  "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  "Person" belongs_to :child, :class_name => "Person" end 

有什么建议?

更新:我使用过has_many:通过 becouse我还存储有关表中关系类型的信息。 目前我放弃了,我在我的表中添加了id字段(Rails约定……)。 但我的问题仍未解决。

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

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

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

这应该会让你朝着正确的方向迈出一步。 我不是在铁路提示测试它,但它应该很快建立一个模型并尝试它。 希望能帮助到你!

 class Relation < ActiveRecord::Base belongs_to :parent, :class_name => "Person", :foreign_key => :parent_id belongs_to :child, :class_name => "Person", :foreign_key => :child_id end class Person < ActiveRecord::Base has_many :relations has_many :children, :through => :relations has_many :parents, :through => :relations end 

在这种情况下我成功使用了has_and_belongs_to_many。 连接表只有外键,没有id键。 一个重要的事情是你没有Relations表的模型,只有Person类中的两个has_and_belongs_to_many引用

这是对Has的一个很好的彻底处理,属于很多