我需要从一些巨大的 CSV 导入记录。 这些记录具有以下格式的 ID:
056d024481a9
(看起来像 SecureRandom.hex(12)
)
我不确定在迁移中应该使用什么类型。如果我使用
UUID
则不合适(它不允许我将其分配给 ID 并保存),并且我不能使用 String
作为主键。
我的代码示例是这样的:
order_attributes = row.to_hash.slice(:id, :amount, :created_at)
orders_list.push(order_attributes)
end
processed_orders = Order.upsert_all(orders_list, returning: %w[id amount])
如果我使用 UUID 类型作为订单 ID,这段代码将不起作用。我被这个问题困扰了,你有什么建议吗?
所以首先,您可以使用字符串作为主键。
但是第二,只需将其转换为整数并将其存储在默认值中:
order_attributes[:id] = order_attributes[:id].to_i(16)
请注意,您还可以通过为 CSV 创建自定义转换器来完成此操作,以便在解析过程中自动发生。