Rails初始化程序 - 出了什么问题

时间:2014-05-28 07:12:06

标签: ruby-on-rails initializer

这是我的第一个初始化程序,我不明白错误。

config\initializers\other_server.rb

OtherServer.setup do |config|
  config.first_server_login = 'qwertyuiop'
  config.first_server_password = '12345'
end

lib\other_server_base.rb

module OtherServer
  mattr_accessor :first_server_login
  @@first_server_login = nil

  mattr_accessor :first_server_password
  @@first_server_password = nil

  def self.setup
    yield self
  end

  class Base
    def self.session_id
      # ................
      # How to access first_server_login and first_server_password here?
      res = authenticate({
          login: first_server_login,
          pass: first_server_password })
      # ................
    end
  end
end

lib\other_server.rb

module OtherServer
  class OtherServer < Base
    # ................
  end
end

如何在first_server_login课程中访问first_server_passwordOtherServer::Base

如果我致电OtherServer.first_server_login,则会抱怨缺少OtherServer::OtherServer.first_server_login成员。

2 个答案:

答案 0 :(得分:1)

我找到了正确的答案:

模块和其中的类可以具有相同的名称。在我的例子中,模块成员应该被引用为:

::OtherServer.first_server_login

就是这样。

答案 1 :(得分:0)

首先,您不能对模块和类使用相同的标识符。

module Test;end # => nil
class Test;end  # => TypeError: Test is not a class

除此之外,关于您的第一个代码段,该变量无法解析,因为它会尝试在Base类中解析它而不会扩展OtherServer(仅在其中定义)它的命名空间)。您仍然可以像这样访问它:

class Base
  def self.session_id      
    OtherServer.first_server_login # this works
  end
end