Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 在迁移中从lambda指定默认值_Ruby_Ruby On Rails 4_Activerecord_Rails Migrations_Ruby On Rails 4.2 - Fatal编程技术网

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!

隐马尔可夫模型。。好啊有道理。