我想创建一些具有随机属性的模型,尽管在某些限制内。在迁移中执行此操作的正确方法是什么?对于小于1000的数字,是否存在比整数更适合的类型?我在考虑如下:
class X < ActiveRecord::Migration
def up
add_column :things, :integer, :default => "a number between 5 and 12"
end
答案 0 :(得分:2)
您可以执行以下操作:
class X < ActiveRecord::Migration
def up
add_column :things, :integer, :default => (5..12).to_a.sample
end
end
答案 1 :(得分:0)
这个问题并没有真正说明每一行是否应该有一个独立的值。这个答案假设“是的,每一行都应该有独立的随机值”。
要实现这一点,随机值必须由数据库生成,而不是由 Rails/ruby 生成。可以使用数据库功能来实现。
以下适用于 Postgreql 上的 Rails 5.2。我没有检查其他东西所以YMMV。
Rails 5.2 接受数据库函数作为 default
如果提供了 proc:
class AddFooInBars < ActiveRecord::Migration[5.2]
def up
add_column(:bars, :foo, :int,
default: -> { "floor(random() * 1000 + 1)::int" }
)