【问题标题】:Self association in rails to keep track of related recordsRails 中的自关联以跟踪相关记录
【发布时间】:2016-11-12 10:04:50
【问题描述】:

我有一个名为 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

这是我为 Letter Tracking 创建的表迁移:

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

正如您在下面的屏幕截图中看到的那样,当我为第二个跟踪选择跟踪记录时,关系还可以,但是当我添加第三个字母跟踪时,第二个关系删除并且最后一个保持关联。 我想要的是在每条记录中保持字母跟踪而不是最后一条。我的意思是像嵌套记录这样的东西,我可以在其中保存相关记录。 任何的想法 ? 谢谢

【问题讨论】:

  • 你的相关控制器和视图是什么样子的?
  • @spickermann 我还没有开始生成控制器和视图,但我只想通过 Rails_admin 管理它

标签: ruby-on-rails ruby associations rails-admin


【解决方案1】:

首先,作为第二个想法,在这种情况下,多态关系似乎对跟踪毫无用处。我想最适合这里的是基于树的关系。 这是我的 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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多