Ruby on rails 如何在create上设置另一个主键值为的列

Ruby on rails 如何在create上设置另一个主键值为的列,ruby-on-rails,ruby,postgresql,activerecord,Ruby On Rails,Ruby,Postgresql,Activerecord,创建记录时,我希望将名为original\u id的列设置为其主键的值(在本例中为id)。本质上,这些行将成为分层的,它们将如下所示: | id | original_id | | -- | ----------- | | 1 | 1 | | 2 | 1 | | 3 | 1 | | .. | 1 | | 42 | 42 | | 43 | 42 | class Account

创建记录时,我希望将名为
original\u id
的列设置为其主键的值(在本例中为
id
)。本质上,这些行将成为分层的,它们将如下所示:

| id | original_id |
| -- | ----------- |
|  1 |           1 |
|  2 |           1 |
|  3 |           1 |
| .. |           1 |
| 42 |          42 |
| 43 |          42 |
class AccountTransaction < ApplicationRecord
  belongs_to :original,
             class_name: 'AccountTransaction',
             foreign_key: :original_id
end
record = AccountTransaction.create
record.update(original: record)
模型将如下所示:

| id | original_id |
| -- | ----------- |
|  1 |           1 |
|  2 |           1 |
|  3 |           1 |
| .. |           1 |
| 42 |          42 |
| 43 |          42 |
class AccountTransaction < ApplicationRecord
  belongs_to :original,
             class_name: 'AccountTransaction',
             foreign_key: :original_id
end
record = AccountTransaction.create
record.update(original: record)

但我正在寻找一个更优雅的解决方案,一个不需要两个数据库事务的解决方案。谢谢您的帮助。

您可以在创建回调后使用
执行操作

class AccountTransaction < ApplicationRecord

  after_create :upate_original_id

  def update_original_id
    update_attribute(original_id: id)
  end

end
class AccountTransaction
谢谢您的意见,但不幸的是,这不是我想要的。我想在单个数据库事务中完成它。您上面的代码与我已有的代码基本相同,我正在寻找一种优化它的方法。从开发人员的角度来看,这是一个单一的数据库事务。他只需对AccountTransaction.create进行编码,
原始id已经填充。开发人员不需要做任何特别的事情来确保这一点。这就是ActiveRecord回调的要点。