Tag: save

Ruby on Rails + PostgreSQL:自定义序列的使用

假设我有一个名为Transaction的模型,它具有:transaction_code属性。 我希望该属性自动填充可能与id不同的序列号(例如, id=1 Transaction可能具有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中生成这些序列号 或任何其他方式,只要它的工作原理:-) 提前致谢。

object.valid? 返回false但object.errors.full_messages为空

我混淆了我无法保存的对象,简化模型是 class Subscription “User”, :foreign_key => “user_id” has_many :transactions, :class_name => “SubscriptionTransaction” validates_presence_of :first_name, :message => “ne peut être vide” validates_presence_of :last_name, :message => “ne peut être vide” validates_presence_of :card_number, :message => “ne peut être vide” validates_presence_of :card_verification, :message => “ne peut être vide” validates_presence_of :card_type, :message => “ne peut être vide” validates_presence_of :card_expires_on, :message […]