我想根据ActiveRecord分配给我的记录的数据库ID在列中生成一个值。通常情况下,我只会添加一个保存后的回调函数,其中生成此值并保存到数据库中。
不幸的是,我必须在该列上处理非空约束,因此需要在获取ID时同时分配它。是否有一种线程安全的方式,将两者结合起来?
答案 0 :(得分:0)
您可以在事务块中编写代码,首先在给定表中找到 id 列的最大值,然后使用该ID值生成其他列的值。这对你有用吗?
ActiveRecord::Base.transaction do
id = maximum(:id)
other_column = "#{id} some string"
create(other_column: other_column)
end