Columns With Default Values Are Nil On Create
Let's say I have a MagicLinks model backed by magic_links Postgres table. Both the id and token columns are of type UUID and have default values of gen_random_uuid(). That means from the Rails-side when I go to create a MagicLink record, I don't have to think about specifying values for id or token -- the DB will take care of that.
> magic_link = MagicLink.create(expires_at: Time.zone.now, user: User.last)
User Load (5.9ms) SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT $1 [["LIMIT", 1]]
TRANSACTION (0.1ms) BEGIN
MagicLink Create (3.1ms) INSERT INTO "magic_links" ("user_id", "expires_at", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id"
...
> magic_link.id
=> "6c6dddbf-4427-407d-8dc8-eef8cb65d491"
> magic_link.token
=> nilThis create call is translated into an insert SQL statement that includes a returning clause. For create it is always returning "id". This means that the UUID value generated in Postgres-land for id gets passed back into the ActiveRecord instance. The UUID value generated for token, however, is not because token isn't specified in the returning clause.
Last updated
Was this helpful?