尝试使用命名空间实现模块

时间:2011-02-08 01:22:07

标签: ruby-on-rails ruby ruby-on-rails-3 namespaces module

我正在使用Ruby on Rails 3,我正在尝试使用命名空间来实现模块。

在我的lib/文件夹中,我有authorization.rb文件:

module Authorizations
  def Authorizations.message
    return "flash_message"
  end
end

在我的控制器中我有:

class Users::AccountsController < ApplicationController # 'Users' is the namespace
  include Authorizations

  def create
    ...
    flash.now[:notice] =  Authorizations.message
  end
end

当我运行create方法时,我收到此错误:

NoMethodError (undefined method 'message' for Authorizations:Module)

有什么问题?


在模块声明中我也尝试了这些

def Authorizations::message
 ...

# or 

def message
  ...

以及那些不起作用。

2 个答案:

答案 0 :(得分:2)

问题出在RAILS_ROOT/config/application.rb。只需以这种方式加载lib/文件夹:

config.autoload_paths += %W(#{config.root}/lib)

答案 1 :(得分:1)

module Authorizations
  def message
    return "flash_message"
  end
end

然后

Authorizations::message

或如果包含在课程中,只需

... = message