Скажем, у меня есть модель с именем Transaction
, которая имеет атрибут :transaction_code
.Я хочу, чтобы этот атрибут автоматически заполнялся порядковым номером, который может отличаться от id
(например, транзакция с id=1
может иметь transaction_code=1000
).
Я попытался создать последовательность на postgres, а затемсделать значение по умолчанию для столбца transaction_code
nextval
этой последовательности.Дело в том, что если я не присваиваю значение @transaction.transaction_code
в RoR, то при выдаче @transaction.save
в RoR он пытается выполнить следующий SQL:
INSERT INTO transactions (transaction_code) VALUES (NULL);
Это создает новую строку в таблице транзакций с кодом транзакции NULL вместо вычисления следующего значения последовательности и вставки ее в соответствующий столбец.Таким образом, как я выяснил, если вы указываете NULL для postgres, предполагается, что вы действительно хотите вставить NULL в этот столбец, независимо от того, имеет ли он значение по умолчанию (я пришел из ORACLE, который ведет себя по-другому).
Я открыт для любого решения по этому вопросу, будь то в базе данных или в RoR:
- или есть способ исключить атрибуты из ActiveRecord
save
- или есть способ изменить значение столбца перед вставкой с помощью триггера
- , или есть способ сгенерировать эти порядковые номера в RoR
- или любым другим способом, еслиэто работает: -)
Заранее спасибо.