Use the has_settings macro within your ActiveRecord models to define setting keys. You can provide default values using a block or use a simplified syntax if no defaults are required.
Basic definition with defaults
class User < ActiveRecord::Base
has_settings do |s|
s.key :dashboard, :defaults => { :theme => 'blue', :view => 'monthly', :filter => false }
s.key :calendar, :defaults => { :scope => 'company'}
end
end
Simplified definition (no defaults)
class User < ActiveRecord::Base
has_settings :dashboard, :calendar
end
Custom Setting Objects for Validations
By default, settings use RailsSettings::SettingObject. You can provide a custom class to implement validations for your settings.
class Project < ActiveRecord::Base
has_settings :info, :class_name => 'ProjectSettingObject'
end
class ProjectSettingObject < RailsSettings::SettingObject
validate do
unless self.owner_name.present? && self.owner_name.is_a?(String)
errors.add(:base, "Owner name is missing")
end
end
end
Persistent settings for multiple definitions
If you need to define settings separately for the same model (e.g., across different concerns), use the persistent: true option to ensure they are stored in the same settings record.
module UserDashboardConcern
extend ActiveSupport::Concern
included do
has_settings persistent: true do |s|
s.key :dashboard
end
end
end
class User < ActiveRecord::Base
has_settings persistent: true do |s|
s.key :calendar
end
end
class User < ActiveRecord::Base
has_settings do |s|
s.key :dashboard, :defaults => { :theme => 'blue', :view => 'monthly', :filter => false }
end
end