Jackson
Jackson

Reputation: 6871

Models on the Rails Console

I have created a simple class under the models folder like so:

class CaffeineShops
 def initialize
 end
end

When I run rails console and try CaffeineShops.new(), I get a message: "NoMethodError: undefined method 'new' for CaffeineShops::Module"

I am using Rails 4.1.

Any ideas why I am getting that error?

Upvotes: 1

Views: 45

Answers (1)

engineersmnky
engineersmnky

Reputation: 29508

You cannot name a model the same name as the application itself. When you run rails g caffeine_shops this creates a module named CaffeineShops which will power your application.

The module is utilized in many files including

config\application.rb

config\environment.rb

config\environments\development.rb

config\environments\production.rb

config\environments\test.rb

config\initializers\secret_token.rb

config\initializers\session_store.rb

config\routes.rb

config.ru *actually starts the application on Rack-based servers

Rakefile *loads rake tasks for the application

When you then try to name a class the same name it creates ambiguity in the rails application so your code is assuming you mean the module CaffeineShops not the class CaffeineShops.

If you were to actually use a generator to define this model rails would make it very clear there was a problem with this e.g.

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.

Upvotes: 1

Related Questions