【发布时间】:2015-03-25 07:30:12
【问题描述】:
我有一个引擎,在lib/ 目录中有这样一个配置文件:
# Default configration for groups, roles and permissions
class Xaaron::Configuration
# What is the memeber group name?
attr_accessor :member_group
# What is the memeber role name?
attr_accessor :member_role
# What is the admin group name?
attr_accessor :admin_group
# What is the admin role name?
attr_accessor :admin_role
# What is the can read permission name?
attr_accessor :can_read
# What is the can create permission name?
attr_accessor :can_create
# What is the can edit permission name?
attr_accessor :can_edit
# What is the can delete permission name?
attr_accessor :can_destroy
# Should we push this data to black bird? False by default.
attr_accessor :push_to_black_bird
# Defaults are set here.
def initialize
@member_group = 'Member'
@admin_group = 'Administrator'
@member_role = 'Member'
@admin_role = 'Administrator'
@can_read = 'can_read'
@can_create = 'can_create'
@can_edit = 'can_edit'
@can_destroy = 'can_destroy'
@push_to_black_bird = false
end
end
如您所见,我已设置默认值,以防您不决定更改这些值。现在在这个引擎 seed.rb 文件中,我可以执行以下操作:
admin_group = Xaaron::Group.create(:group_name => Xaaron.config.admin_group, :can_alter => false, :can_delete => false)
它按预期工作,我们看到Administrator 被设置为组名。
现在我尝试在安装此引擎的应用程序中创建以下内容:
Xaaron.configure do |config|
config.push_to_black_bird = true
end
但是当我启动应用程序时,我得到了:
`block in <top (required)>': undefined method `push_to_black_bird=' for #<Xaaron::Configuration:0x007fbc6b305988> (NoMethodError)
我真的必须为每篇论文定义 set 和 get 方法吗?我见过以类似方式完成的其他配置文件。
【问题讨论】:
-
能否分享
configure方法代码?会有帮助的。 -
@market,我是?它的
Xaaron::Configuration类。需要Xaaron.configuration吗?如果是这样,为什么我的种子有效?因为如果我这样做puts Xaaron.config.admin_group我会在引擎中得到"Administrator"并在应用程序中安装引擎。 -
在 Ruby 中
attr_accessor定义了 getter 和 setter,因此您不必定义它们。关键是看看这个configure方法做了什么。示例代码:github.com/markets/invisible_captcha/blob/master/lib/…。用法示例:github.com/markets/maily#initialization-and-configuration -
我实际上没有设置或定义任何类型的“
configure”方法。然而,当我做Xaaron.config.admin_group时,它有些神奇地工作我可以获得价值,我只是不能通过做Xaaron.configure do |config| ... end@markets 来设置价值 - 应该是Xaaron.initialize do |config| ... end -
如果不看更多代码肯定不容易……这个 Xaaron 库是开源的吗?无论如何,您正在为
Xaaron::Configuration类定义访问器,而不是Xaaron,因此您可能应该执行以下操作:Xaaron::Configuration.configure do ...。或者可能是Xaaron.configure do ...将其包装在里面,这就是我要求使用该方法的原因。
标签: ruby-on-rails configuration rails-engines initializer