Skip to content

Add default value for ActiveRecord attributes

License

Notifications You must be signed in to change notification settings

fnando/defaults

Repository files navigation

Defaults

Tests Gem Gem

Instalation

Add this line to your application's Gemfile:

gem "defaults"

And then execute:

$ bundle

Or install it yourself as:

$ gem install defaults

Usage

Here are the rules:

  1. Assigned attributes have precedence over default values
  2. Default values have precedence over database defaults.

Add the method call defaults to your model.

class Page < ActiveRecord::Base
  defaults title: "New page",
           body: "Put your text here"
end

Attributes will be set only if it's a new record and the attribute is blank.

Retrieve the default attribute with the default_for instance method:

@page.default_for(:title)

You can pass callables (any objects that respond to .call() or .call(record)) as attribute:

class Expiration
  def self.call
    Time.now
  end
end

class Checksum
  def self.call(user)
    Digest::SHA1.hexdigest(user.name.to_s, user.email.to_s)
  end
end

class User < ApplicationRecord
  defaults checksum: Checksum,
           expires_at: -> { Time.now }
end

You can override the default attributes as follow:

Page.default_values = {
  title: "Here's your new page",
  body: "Write your page text"
}

Maintainer

Contributors

Contributing

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

Code of Conduct

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