【发布时间】:2011-10-19 11:40:15
【问题描述】:
假设我有一个名为 Transaction 的模型,它有一个 :transaction_code 属性。
我希望该属性自动填充一个可能与id 不同的序列号(例如,id=1 的交易可能有transaction_code=1000)。
我尝试在 postgres 上创建一个序列,然后将 transaction_code 列的默认值设为该序列的 nextval。
问题是,如果我没有在 RoR 上为 @transaction.transaction_code 分配任何值,当我在 RoR 上发出 @transaction.save 时,它会尝试执行以下 SQL:
INSERT INTO transactions (transaction_code) VALUES (NULL);
这样做是在 Transactions 表上创建一个新行,其中 transaction_code 为 NULL,而不是计算序列的 nextval 并将其插入相应的列。因此,正如我发现的那样,如果您为 postgres 指定 NULL,它假定您确实想将 NULL 插入该列,而不管它是否具有默认值(我来自具有不同行为的 ORACLE)。
我愿意接受任何解决方案,无论是在数据库上还是在 RoR 上完成:
- 有一种方法可以从 ActiveRecord 中排除属性
save - 或者有一种方法可以在使用触发器插入之前更改列的值
- 或者有一种方法可以在 RoR 中生成这些序列号
- 或任何其他方式,只要它有效:-)
提前致谢。
【问题讨论】:
标签: ruby-on-rails postgresql activerecord save rails-postgresql