Configurable
实例方法
config
用 @_config 实例变量来保存配置信息。
使用举例:
require 'active_support/configurable'
class User
include ActiveSupport::Configurable
end
user = User.new
# 写 config 对象
user.config.allowed_access = true
user.config.level = 1
# 读 config 对象
user.config.allowed_access # => true
user.config.level # => 1
类方法
config_accessor
以声明的形式,同时定义类方法和实例方法。 实例对象的值默认继承于类对象,修改某个实例对象的值不影响类对象和其它实例对象的值。
使用举例:
class User
include ActiveSupport::Configurable
# 直接使用
config_accessor :allowed_access
end
# 相关类方法
User.allowed_access # => nil
User.allowed_access = false
User.allowed_access # => false
user = User.new
# 相关实例方法
user.allowed_access # => false
user.allowed_access = true
user.allowed_access # => true
User.allowed_access # => false
再次举例:
class User
include ActiveSupport::Configurable
# 带 instance_reader、instance_writer 参数
config_accessor :allowed_access, instance_reader: false, instance_writer: false
# 带 instance_accessor 参数
config_accessor :allowed_access, instance_accessor: false
# 带 block
config_accessor :hair_colors do
[:brown, :black, :blonde, :red]
end
end
除此之外,还有类方法:
config # Configuration 的实例对象。实例方法 config 和 类方法 config_accessor 调用到它。
configure # 直接封装 config
Note: 它和 railties 目录下的 Configurable 和 Configuration 都没有关系。目前只发现有 AbstractController::Base 引用到它(其子类由于继承关系,也可以使用)。
Configuration
# 类方法
compile_methods!
# 实例方法
compile_methods!
另外,它继承于 ActiveSupport::InheritableOptions
Note: 不对 module Configurable 之外提供接口,只有这里使用到它。
最后更新于
这有帮助吗?