Beginner: "NameError - uninitialized constant" when I create a model object


#1

My first Rails example using model and I got this NameError:
NameError in VandaController#att
uninitialized constant VandaController::Compute

Same code works fine if I don’t create the Compute object.
What did I do wrong?

Here is the Controller
class VandaController < ApplicationController
def att
@compute = Compute.new
@data1 = @compute.cmpt
end
end

Here is the Model
class Compute
def cmpt
return 5
end
end

And here is the view

Model

reading data from a model



Fetch : <%= @data1 %> from Compute model.

#2

On Nov 28, 1:49 pm, packat removed_email_address@domain.invalid wrote:

My first Rails example using model and I got this NameError:
NameError in VandaController#att
uninitialized constant VandaController::Compute

Is the model in compute.rb in app/models or lib ?

Fred


#3

It is in app/models

On Nov 28, 9:28 am, Frederick C. removed_email_address@domain.invalid
wrote:

On Nov 28, 1:49 pm, packat removed_email_address@domain.invalid wrote:> My first Rails example using model and I got this NameError:

NameError in VandaController#att
uninitialized constant VandaController::Compute

Is the model in compute.rb in app/models or lib ?

It is in app/models.

I am following a book “Beginning Ruby on Rails” by Steven Holzner.
That book may be based on older version. Mine is 1.8.6

After posting the question, I blindly tried running
“ruby script/generate model compute”

and now get a different error:

ActiveRecord::StatementInvalid in VandaController#att
Mysql::Error: Table ‘orchids.computes’ doesn’t exist: SHOW FIELDS FROM
computes

Apparently, a schema is created for Compute and Ruby thought ther is a
Compute table in the database.
So this is not helping any.

Fred
Thanks Fred


#4

On Nov 28, 2:57 pm, packat removed_email_address@domain.invalid wrote:

It is in app/models.

The important thing was whether the file was called compute.rb

I am following a book “Beginning Ruby on Rails” by Steven Holzner.
That book may be based on older version. Mine is 1.8.6
The important thing would be the rails version, not the ruby version.

and now get a different error:

ActiveRecord::StatementInvalid in VandaController#att
Mysql::Error: Table ‘orchids.computes’ doesn’t exist: SHOW FIELDS FROM
computes

Apparently, a schema is created for Compute and Ruby thought ther is a
Compute table in the database.
So this is not helping any.
It would have created a migration to add that table but it would not
have run it. You can run it with
rake db:migrate

Fred