在rails中自关联以跟踪相关记录

Self association in rails to keep track of related records

我有一个名为 Letter 的模型和另一个名为 LetterTracking 的模型:

class Letter < ApplicationRecord
  has_many :letter_trackings, as: :trackable
end

和:

class LetterTracking < ApplicationRecord
    belongs_to :letter
    has_many :letter_trackings, as: :trackable 
end

这是我为信件追踪创建的 table 迁移:

class CreateLetterTrackings < ActiveRecord::Migration[5.0]
  def change
    create_table :letter_trackings do |t|
      t.integer  :trackable_id, default: 0, null: false, unique: true
      t.string   :trackable_type
      t.text     :paraph
      t.string   :status
      t.string   :assignee
      t.belongs_to :letter
      t.timestamps
    end
  end
end

正如您在下面的屏幕截图中看到的那样,当我 select 第二次跟踪的跟踪记录关系正常时,但是每当我添加第三个字母跟踪时,第二个关系就会删除,最后一个会保留该协会。 我想要的是在每条记录中而不是最后一条记录中跟踪字母。我的意思是像嵌套记录这样的东西,我可以在其中保留相关记录。 任何想法 ? 谢谢

首先,作为第二个想法,在这种情况下,多态关系对于保持跟踪似乎毫无用处。我想最适合这里的是基于树的关系。 这是我的 LetterTracking.rb

class LetterTracking < ApplicationRecord
    belongs_to :letter
    has_many :children, class_name: "LetterTracking", foreign_key: "parent_id"                             
    belongs_to :parent, class_name: "LetterTracking"
end

这是我的 letter.rb

class Letter < ApplicationRecord
    has_many :letter_trackings
end

最后是 LetterTrackings 迁移

class CreateLetterTrackings < ActiveRecord::Migration[5.0]
  def change
    create_table :letter_trackings do |t|
      t.references :parent, index: true
      t.text     :paraph
      t.string   :status
      t.string   :assignee
      t.belongs_to :letter, index: true
      t.timestamps
    end
  end
end

现在我可以让 lettertrackings 的记录像树一样连接在一起,同时在每条记录中保留字母 ID!是的:)