Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

ar-uuid

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ar-uuid

  • 0.2.3
  • Rubygems
  • Socket score

Version published
Maintainers
1
Created
Source

ar-uuid

Tests Gem Gem

Override migration methods to support UUID columns without having to be explicit about it.

Installation

gem install ar-uuid

Or add the following line to your project's Gemfile:

gem "ar-uuid"

Usage

There's no setup. Just adding the gem to your Gemfile is enough. When you create a new table, the id column will be defined as uuid. This is also true for references.

create_table :users
add_reference :posts, :users

create_table :posts do |t|
  t.belongs_to :user
  # or
  t.references :user
end

If you need a serial column, AR's PostgreSQL supports the bigserial column type.

create_table :users do |t|
  t.column :position, :bigserial, null: false
end

Sorting

Rails 6.0 or newer

If you're using Rails 6.0 or newer, you can set a default sorting with ActiveRecord::ModelSchema.implicit_order_column, so methods like ActiveRecord::FinderMethods::InstanceMethods#first and ActiveRecord::FinderMethods::InstanceMethods#last will work transparently, as long as you define another column for sorting, such as created_at (you may need to add an index).

The following example sets a default behavior to always sort using created_at (when available). On your abstract model, add the following lines:

class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true

  def self.inherited(child_class)
    super

    return unless child_class.columns.any? {|col| col.name == "created_at" }

    child_class.implicit_order_column ||= "created_at"
  end
end
Older Rails versions

For older Rails versions, you can't use methods like ActiveRecord::FinderMethods::InstanceMethods#first and ActiveRecord::FinderMethods::InstanceMethods#last, since they are scoped to the sequential id.

The easiest alternative is ordering results and calling first/last. You can either create a sequence, or use the created_at/updated_at columns:

# Get first record
User.order(created_at: :asc).first

# Get last record
User.order(created_at: :desc).first

# Use scopes
class User < ApplicationRecord
  scope :newer, -> { order(created_at: :desc) }
  scope :older, -> { order(created_at: :asc) }
end

User.older.first
User.newer.first

You can also replace .first with ActiveRecord::FinderMethods::InstanceMethods#take, which will use the order implemented by the database.

There's no alternative to .last.

Maintainer

Contributors

Contributing

For more details about how to contribute, please read https://github.com/fnando/ar-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-uuid/blob/main/LICENSE.md.

Code of Conduct

Everyone interacting in the ar-uuid project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.

FAQs

Package last updated on 25 Jul 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc