在由number序列创建的controller表中有一个惟一的字段postgres。迁移的方式如下:
def self.up
execute "CREATE SEQUENCE controller_number_seq START WITH 11000000"
execute "ALTER TABLE controller ALTER COLUMN controller_number SET DEFAULT nextval('controller_number_seq');"
end每当我现在创建一个新的Controller实例时,数字就会增加到由这个序列定义的下一个空闲值。
现在,我想知道如何将我的:controller工厂链接到这个postgres序列。我可以创建这样的FactoyGirl序列
sequence(:phone){|n| "1100000#{n}"}(它也只适用于n<10,否则会产生错误的数字)
但是似乎有一种更干净的方法,因为我使用了数据库,我应该能够直接访问postgres序列并将其分配给我的:controller工厂。
发布于 2016-07-14 19:48:12
正如它在FactoryGirl文档中所说的,您可以为序列设置初始值:
还可以重写初始值: 工厂:用户do序列(:email,1000) {person#{n}@example.com“} end
你的例子就是:
sequence(:phone, 11000000)我不认为为此目的使用数据库生成器是个好主意。例如,在运行测试或示例组之后,您必须确保值重置。此外,出于性能原因,通常希望将测试与数据库分离。如果没有特定的语义依赖于数据库级别上的序列,那么FactoryGirl序列就会做得很好。
https://stackoverflow.com/questions/38381080
复制相似问题