我在models文件夹下创建了一个简单的类,如下所示:
class CaffeineShops
def initialize
end
end
当我运行rails console并尝试CaffeineShops.new()时,我收到一条消息:" NoMethodError:未定义的方法' new' for CaffeineShops :: Module"
我正在使用Rails 4.1。
我为什么会收到这个错误?
答案 0 :(得分:1)
您不能将模型命名为与应用程序本身相同的名称。当您运行rails g caffeine_shops
时,会创建一个名为CaffeineShops
的模块,该模块将为您的应用程序提供支持。
该模块用于许多文件,包括
设置\ application.rb中
设置\的environment.rb
设置\环境\ development.rb
设置\环境\ production.rb
设置\环境\ test.rb
设置\初始化\ secret_token.rb
设置\初始化\ session_store.rb
config \ routes.rb
config.ru *实际上在基于机架的服务器上启动应用程序
Rakefile *为应用程序加载rake任务
当您尝试使用相同的名称命名一个类时,它会在rails应用程序中创建歧义,因此您的代码假设您的意思是module CaffeineShops
而不是class CaffeineShops
。
如果你真的使用一个发电机来定义这个模型,那么轨道会非常明显地存在问题。例如
rails g caffeine_shops
cd caffeine_shops
rails g model caffeine_shops
#=>The name 'CaffeineShops' is either already used in your application or reserved
by Ruby on Rails. Please choose an alternative and run this generator again.