运行环境:Ruby 2.2.4,Rails 3.2.22,development 环境下,autoload_paths 默认。
最近在项目中遇到了这样一个问题:
# app/models/shop/event.rb
module Shop
class Event < ActiveRecord
def self.test
'hello'
end
end
end
# app/controllers/api/books_controller.rb
class Api::BooksController < ApplicationController
def self.test
Shop::Event.test
end
end
# rails console
pry> Api::BooksController.test
---> NameError: uninitialized constant Api::Shop::Event
倘若将 app/controllers/api/books_controller.rb 中的 Shop::Event.test 加上顶级限定符则不报错:
# app/controllers/api/books_controller.rb
class Api::BooksController < ApplicationController
def self.test
::Shop::Event.test
end
end
# rails console
pry> Api::BooksController.test
---> 'hello'
或者在调用 Api::BooksController.test 之前使用 load 'shop/event.rb' 也可以正常运行。
production 环境,在 rails console 下运行不会报错(不清楚是否是不是哪里加载了),想请教下是什么原因导致的呢?
相关主题: