Ruby gem to handle settings for ActiveRecord instances by storing them as serialized Hash in a separate database table. Namespaces and defaults included.
RailsSetting & SettingsLogic
使用settingslogic设置的参数一次性设置缺省值:
settings:
users:
defaults:
dashboard:
theme: blue
view: monthly
filter: false
calendar:
scope: company
class User < ActiveRecord::Base
has_settings Settings.settings.users
end
也可以单独再追加设置:
class User < ActiveRecord::Base
has_setting :info, defaults: { show: true }
end
Every setting is handled by the class RailsSettings::SettingObject
. You can use your own class, e.g. for validations:
class Project < ActiveRecord::Base
has_settings class_name: 'ProjectSettingObject', defaults: { dashboard: {theme: 'default'} }
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
user = User.find(1)
user.settings(:dashboard).theme = 'black'
user.settings(:calendar).scope = 'all'
user.settings(:calendar).display = 'daily'
user.save! # saves new or changed settings, too
user = User.find(1)
user.settings.dashboard.theme = 'black'
user.settings:calendar.scope = 'all'
user.settings:calendar.display = 'daily'
user.save! # saves new or changed settings, too
or
user = User.find(1)
user.settings(:dashboard).update_attributes! :theme => 'black'
user.settings(:calendar).update_attributes! :scope => 'all', :display => 'dialy'
user = User.find(1)
user.settings(:dashboard).theme
# => 'black
user.settings(:dashboard).view
# => 'monthly' (it's the default)
user.settings(:calendar).scope
# => 'all'
# or
user = User.find(1)
user.settings.dashboard.theme
# => 'black
user.settings.dashboard.view
# => 'monthly' (it's the default)
user.settings.calendar.scope
# => 'all'
User.with_settings
# => all users having any setting
User.without_settings
# => all users without having any setting
User.with_settings_for(:calendar)
# => all users having a setting for 'calender'
User.without_settings_for(:calendar)
# => all users without having settings for 'calendar'
- Ruby 1.9.3 or 2.0.0
- Rails 3.1 or greater (including Rails 4)
Include the gem in your Gemfile and run bundle
to install it:
gem 'ledermann-rails-settings', :require => 'rails-settings'
Generate and run the migration:
rails g rails_settings:migration
rake db:migrate
Version 2 is a complete rewrite and has a new DSL, so it's not compatible with Version 1. In addition, Rails 2.3 is not supported anymore. But the database schema is unchanged, so you can continue to use the data created by 1.x, no conversion is needed.
If you don't want to upgrade, you find the old version in the 1.x branch. But don't expect any updates there.
MIT License
Copyright (c) 2013 Georg Ledermann
This gem is a complete rewrite of rails-settings by Alex Wayne