如何在create上使用主键的值设置另一列

时间:2016-09-01 14:59:48

标签: ruby-on-rails ruby postgresql activerecord

创建记录时,我想将名为0000000: 68 74 74 70 3a 2f 2f 73 74 61 63 6b 6f 76 65 72 http://stackover 0000010: 66 6c 6f 77 2e 63 6f 6d 2f 71 2f 33 39 31 39 37 flow.com/q/39197 0000020: 37 30 33 2f 35 31 32 38 34 36 34 00 00 00 00 00 703/5128464..... 的列设置为其主键的值(在本例中为original_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

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

1 个答案:

答案 0 :(得分:0)

您可以使用after_create回调执行某些操作。

class AccountTransaction < ApplicationRecord

  after_create :upate_original_id

  def update_original_id
    update_attribute(original_id: id)
  end

end