Can't list db content in rails

Hi all,
I am very very new to ruby and rails so I thought I’d follow a couple of
starter manuals.

Bellow the error I have listed versions and commands executed.

The problem I am having is that I can display:

http://acc.precognet.com/invoices/new

but when I try to display:
http://acc.precognet.com/invoices
or
http://acc.precognet.com/invoices/list

I get the following error:

NameError in InvoicesController#index
uninitialized constant Invoice

RAILS_ROOT: /var/www/acc.precognet.com/public/…/config/…
Application Trace | Framework Trace | Full Trace
/usr/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/active_support/dependencies.rb:266:in
load_missing_constant' /usr/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/active_support/dependencies.rb:452:in const_missing’
/usr/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/active_support/dependencies.rb:464:in
const_missing' /usr/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/active_support/inflector.rb:250:in constantize’
/usr/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/active_support/core_ext/string/inflections.rb:148:in
constantize' /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/pagination.rb:201:in paginator_and_collection_for’
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/pagination.rb:132:in
paginate_without_deprecation' /usr/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/active_support/deprecation.rb:94:in paginate’
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/scaffolding.rb:108:in
list' /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/scaffolding.rb:96:in index’
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/base.rb:1101:in
send' /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/base.rb:1101:in perform_action_without_filters’
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/filters.rb:696:in
call_filters' /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/filters.rb:688:in perform_action_without_benchmark’
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/benchmarking.rb:66:in
perform_action_without_rescue' /usr/lib/ruby/1.8/benchmark.rb:293:in measure’
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/benchmarking.rb:66:in
perform_action_without_rescue' /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/rescue.rb:83:in perform_action’
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/base.rb:435:in
send' /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/base.rb:435:in process_without_filters’
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/filters.rb:684:in
process_without_session_management_support' /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/session_management.rb:114:in process’
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.5/lib/action_controller/base.rb:334:in
process' /usr/lib/ruby/gems/1.8/gems/rails-1.2.5/lib/dispatcher.rb:41:in dispatch’
/usr/lib/ruby/gems/1.8/gems/rails-1.2.5/lib/fcgi_handler.rb:168:in
process_request' /usr/lib/ruby/gems/1.8/gems/rails-1.2.5/lib/fcgi_handler.rb:143:in process_each_request!’
/usr/lib/ruby/gems/1.8/gems/rails-1.2.5/lib/fcgi_handler.rb:109:in
with_signal_handler' /usr/lib/ruby/gems/1.8/gems/rails-1.2.5/lib/fcgi_handler.rb:142:in process_each_request!’
/usr/lib/ruby/site_ruby/1.8/fcgi.rb:600:in each_cgi' /usr/lib/ruby/site_ruby/1.8/fcgi.rb:597:in each’
/usr/lib/ruby/site_ruby/1.8/fcgi.rb:597:in each_cgi' /usr/lib/ruby/gems/1.8/gems/rails-1.2.5/lib/fcgi_handler.rb:141:in process_each_request!’
/usr/lib/ruby/gems/1.8/gems/rails-1.2.5/lib/fcgi_handler.rb:55:in
process!' /usr/lib/ruby/gems/1.8/gems/rails-1.2.5/lib/fcgi_handler.rb:25:in process!’
/var/www/acc.precognet.com/public/dispatch.fcgi:24
Request

Parameters: {“invoices.html”=>nil}

Show session dump

flash: !map:ActionController::Flash::FlashHash {}

Response
Headers: {“cookie”=>[], “Cache-Control”=>“no-cache”}

I am using:
Ruby version 1.8.6 (i686-linux)
RubyGems version 0.9.4
Rails version 1.2.5
Active Record version 1.15.5
Action Pack version 1.13.5
Action Web Service version 1.2.5
Action Mailer version 1.3.5
Active Support version 1.4.4
Application root /var/www/acc.precognet.com
Environment development
Database adapter mysql

Here are all the steps I took:

cd /var/www

rails acc.precognet.com

cd acc.precognet.com/config

dev info from database.yml
development:
adapter: mysql
database: dev_precognet
username: dev
password: password
socket: /var/run/mysqld/mysqld.sock

I took an existing db, dumped it to an sql file, renamed the db to
dev_db and
reinjected into mysql.

cat /etc/apache2/vhosts.d/acc.precognet.com.conf

        SetEnv RAILS_ENV development
        ServerName acc.precognet.com
        DocumentRoot /var/www/acc.precognet.com/public
        ServerSignature On
        ErrorDocument 500 /500.html
        ErrorLog /var/log/apache2/acc.precognet.com.error_log
        CustomLog /var/log/apache2/acc.precognet.com.access_log combined
        LogLevel warn
        
                Options ExecCGI FollowSymLinks
                AddHandler fcgid-script .fcgi
                Order allow,deny
                Allow from all
                RewriteEngine On
                RewriteRule ^$ index.html [QSA]
                RewriteRule ^([^.]+)$ $1.html [QSA]
                RewriteCond %{REQUEST_FILENAME} !-f
                RewriteRule ^(.*)$ /dispatch.fcgi?$1 [QSA,L]
                AllowOverride None
        

/etc/init.d/apache2 restart

cd /var/www/acc.precognet.com

ruby script/generate model invoices

ruby script/generate controler invoices

cat app/controllers/invoices_controller.rb

class InvoicesController < ApplicationController
scaffold :invoices
end

chown -R apache:apache public tmp

vi public/dispatch.fcgi

RailsFCGIHandler.process!
‘/var/log/apache2/acc.precognet.com_fcgi_crash.log’

touch /var/log/apache2/acc.precognet.com_fcgi_crash.log

chown apache:apache /var/log/apache2/acc.precognet.com_fcgi_crash.log

Replace the following in public/.htaccess
#RewriteRule ^(.)$ dispatch.cgi [QSA,L]
RewriteRule ^(.
)$ dispatch.fcgi [QSA,L]

Relevant SQL table dump:

– Table structure for table invoices

DROP TABLE IF EXISTS invoices;
CREATE TABLE invoices (
id int(6) unsigned zerofill NOT NULL,
cli_id int(8) unsigned zerofill NOT NULL,
sent date NOT NULL,
amount decimal(7,2) NOT NULL,
payed date default NULL,
path varchar(254) default NULL,
filename varchar(15) default NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT=‘Precognet
invoices table’;

I’m sorry for the long post but I have tried many times and never get
past
this step.

I hope someone can help :slight_smile:
-Ed


The following is something I have discovered although I can’t figure
out why…

My tables tend to end with an ‘s’ such as clients but if I run the
following commands without the ‘s’ (single client) , then it works

ruby script/generate model client

  exists  app/models/
  exists  test/unit/
  exists  test/fixtures/
  create  app/models/client.rb
  create  test/unit/client_test.rb
  create  test/fixtures/clients.yml
  create  db/migrate
  create  db/migrate/001_create_clients.rb

ruby script/generate controler client

  exists  app/controllers/
  exists  app/helpers/
  create  app/views/client
  exists  test/functional/
  create  app/controllers/client_controller.rb
  create  test/functional/client_controller_test.rb
  create  app/helpers/client_helper.rb

http://acc.precognet.com/client
Listing clients

So even though I mention the wrong table name ‘client’ rather than
‘clients’, it works and the output says ‘clients’!!

Any thoughts on this?
-Ed

Hi Ed

Using Active Scaffold makes data manipulation and display pretty
trival.

CCH

Hi CCH

On Nov 18, 4:53 pm, “[email protected]
[email protected] wrote:

Hi CCH,
Could you be a bit more specific?

cch : What I meant was database web development is a breeze with
Active Scaffold plugin installed.

model and build using the client succeeds

Now I doubt very much that a requirement of rails is that all tables
should end with an ‘s’ and all reference to them should ‘lose’ the
‘s’… so what am I doing wrong?

cch: Yes, it is a Rails convention that all tables should end with an
‘s’ unless you turn pluralization off.

CCH

Hi CCH,
Could you be a bit more specific?

The problem I had was for example:

  1. table named clients
    model and build using the clients fails

  2. table named client
    model and build using the client fails

  3. table named clients
    model and build using the client succeeds

Now I doubt very much that a requirement of rails is that all tables
should end with an ‘s’ and all reference to them should ‘lose’ the
‘s’… so what am I doing wrong?
-Ed

On Nov 18, 10:42 am, CCH [email protected] wrote:

cch: Yes, it is a Rails convention that all tables should end with an
‘s’ unless you turn pluralization off.

CCHhttp://cch4rails.blogspot.com

Hmmm, yes, just read about that. Odd but I guess taht with time I’ll
understand why.

Thanks for your input, I am one step further in the learning curve :slight_smile:
-Ed

Well, thats not completely true. Tables should be plural (but not
necessarily with an s) and your models should be singular. It’s just a
conventions so that rails knows what table to look for, plus it makes
sense. Take the example of a table holding people’s information. The
table would be called people and the model would be person. This makes
sense since because there are multiple people in the table so the
table’s name rightly is “people”. When you pull a record from that
table and instantiate an object of your Person class, the singular name
“Person” then makes sense because it represents one person from a table
of people.

Hope this clears it up a bit,
-Bill