【问题标题】:Configuration values wont set in Rails Engine 4.1.9配置值不会在 Rails Engine 4.1.9 中设置
【发布时间】: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


【解决方案1】:

也许这是错误的方法,但这就是我的工作方式:

Xaaron.configure do |config|
  Xaaron.configuration.admin_group = 'Sample' # Prev: Administrator
end

puts Xaaron.config.admin_group #=> Sample, was Administrator.

【讨论】:

  • 在这种情况下,您可能不需要将配置包装到该块中,因为您正在访问另一个范围(您不要在块内使用 config 变量)。 Xaaron.configuration.admin_group = 'Sample' 应该够了。
猜你喜欢
  • 1970-01-01
  • 2013-09-19
  • 1970-01-01
  • 1970-01-01
  • 2012-02-28
  • 2014-11-22
  • 2013-02-27
  • 1970-01-01
  • 2011-05-04
相关资源
最近更新 更多