假设我有一个名为的模型Transaction
,它有一个:transaction_code
属性。我希望该属性自动填充一个可能不同于的序列号id
(例如 Transaction with id=1
could have transaction_code=1000
)。
我试图在 postgres 上创建一个序列,然后为该序列的transaction_code
列设置默认值nextval
。问题是,如果我没有为@transaction.transaction_code
on RoR 分配任何值,当我发出@transaction.save
on RoR 时,它会尝试执行以下 SQL:
INSERT INTO transactions (transaction_code) VALUES (NULL);
这样做是在 Transactions 表上创建一个新行,其中 transaction_code 为 NULL,而不是计算序列的 nextval 并将其插入相应的列。因此,正如我发现的那样,如果您为 postgres 指定 NULL,它假定您确实想将 NULL 插入该列,而不管它是否具有默认值(我来自具有不同行为的 ORACLE)。
我对这方面的任何解决方案持开放态度,无论是在数据库上还是在 RoR 上完成:
- 要么有办法从 ActiveRecord 中排除属性
save
- 或者有一种方法可以在使用触发器插入之前更改列的值
- 或者有一种方法可以在 RoR 中生成这些序列号
- 或任何其他方式,只要它有效:-)
提前致谢。