ar-sqlite-uuid
Override migration methods to support UUID/ULID columns without having to be explicit about it.
Installation
$ gem install ar-sqlite-uuid
Or add the following line to your project's Gemfile:
$ bundle add ar-sqlite-uuid
Also, make sure the extension is loaded. I recommend using sqlpkg. Then you can install the extension you want to use:
$ sqlpkg install asg017/ulid
$ sqlpkg install sqlite/uuid
To load the extension into your sqlite database,
Usage
On your gemfile, you must specify which extension you want to use by loading
either ar-sqlite-uuid
or ar-sqlite-ulid
.
source "https://rubygems.org"
# This will use the `sqlite/uuid` extension.
gem "ar-sqlite-uuid"
# This will use the `asg017/ulid` extension.
gem "ar-sqlite-uuid", require: "ar-sqlite-ulid"
Alternatively, you can also manually define the function that will be used:
# file: config/initialize/active_record.rb
# use ulid
AR::UUID.default_function = "ulid()"
# use ulid with a static prefix
AR::UUID.default_function = "ulid_with_prefix('myapp')"
# use ulid with a dynamic prefix.
# By default it uses the table name, but you can override it by passing a
# `:prefix` key to `t.primary_key` or `create_table`.
AR::UUID.default_function = "ulid_with_prefix('%{prefix}')"
# use uuid
AR::UUID.default_function = "uuid()"
When you create a new table, the id
column will be defined as TEXT
, using
the defined function as the default value.
create_table :users
add_reference :posts, :users
create_table :posts do |t|
t.belongs_to :user
# or
t.references :user
end
If you need an integer column, specify the type manually.
create_table :users, do |t|
t.column :position, :bigserial, null: false
end
Maintainer
Contributors
Contributing
For more details about how to contribute, please read https://github.com/fnando/ar-sqlite-uuid/blob/main/CONTRIBUTING.md.
License
The gem is available as open source under the terms of the MIT License. A copy of the license can be found at https://github.com/fnando/ar-sqlite-uuid/blob/main/LICENSE.md.
Code of Conduct
Everyone interacting in the ar-sqlite-uuid project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.