Add this line to your application's Gemfile:
gem "defaults"
And then execute:
$ bundle
Or install it yourself as:
$ gem install defaults
Here are the rules:
- Assigned attributes have precedence over default values
- 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"
}
For more details about how to contribute, please read https://github.com/fnando/defaults/blob/main/CONTRIBUTING.md.
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.
Everyone interacting in the defaults project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.