Ruby 在迁移中从lambda指定默认值
我想在我的一些模型中添加一个非空列Ruby 在迁移中从lambda指定默认值,ruby,ruby-on-rails-4,activerecord,rails-migrations,ruby-on-rails-4.2,Ruby,Ruby On Rails 4,Activerecord,Rails Migrations,Ruby On Rails 4.2,我想在我的一些模型中添加一个非空列unique\u id。这方面的实现基本上是SecureRandom.hex(8)。是否有一种方法可以在迁移本身中指定这一点,以便它计算所有较旧的行的默认值 也许是这样的: add_列:users,:unique_id,:string,null:false,默认值:proc{generate_unique_id}。call 问题是,上述方法只会生成一次唯一的\u id(这是预期的)。有没有办法指定为每一行生成默认值?这不能直接在add\u列中进行。共同的做法是:
unique\u id
。这方面的实现基本上是SecureRandom.hex(8)
。是否有一种方法可以在迁移本身中指定这一点,以便它计算所有较旧的行的默认值
也许是这样的:
add_列:users,:unique_id,:string,null:false,默认值:proc{generate_unique_id}。call
问题是,上述方法只会生成一次
唯一的\u id
(这是预期的)。有没有办法指定为每一行生成默认值?这不能直接在add\u列中进行。共同的做法是:
- 创建一个可为空的列李>
- 用生成的UID填充它李>
- 更新列定义
在您的代码中,proc{generate\u unique\u id}.call
没有多大意义,因为它是generate\u unique\u id
的绝对等式
add_column :users, :unique_id, :string, null: true
# it’s still a plain ruby code!
User.find_each do |u|
# or better use built-in SQL functoin to do this in batch
# inside your db, instead of performing a dozillion of updates
u.update_column(:unique_id, generate_unique_id)
end
change_column :users, :unique_id, :string, null: false # NOW!
隐马尔可夫模型。。好啊有道理。