在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!是的:)
我有一个名为 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!是的:)