Forum: Ruby on Rails Using a model name ending in 's' problematic?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
RichardOnRails (Guest)
on 2008-11-16 00:26
(Received via mailing list)
Hi,

Referencing the URL http://localhost:3000/cvs netted me the response:
   “uninitialized constant CvsController::Cvs”
with  the trace information:
        K:/_Utilities/ruby186-26_rc2/ruby/lib/ruby/gems/1.8/gems/
activesupport-2.2.0/lib/active_support/dependencies.rb:102:in
`const_missing'
app/controllers/cvs_controller.rb:5:in `index'

Lines 4-5 of the controller are:
  def index
    @cvs = Cvs.find(:all)

The cause seems clearly related to item 3 below.  What should I do to
correct the situation.

By way of background.
1. I created a Rails 2.0.2 Payroll application a few days ago.
2. I more recently upgraded Rails to 2.2, which required a couple
tweaks:
    a. The statement I used was:
    a. Removed the “config.action_view.cache_template_extensions”
reference
    b. Set RAILS_GEM_VERSION = '2.2.0'
3. Created new model, Cvs ... where there was one anomaly:
    a. The statement I used was:
        ruby script/generate scaffold Cvs filename:string created:date
modified:date imported:date
    b. The scaffold reported “create    app/models/cv.rb” instead of
cvs.rb
    c. I tried changing the name manually,  but that only introduced
more error msgs
4. “raked” the migrations
5. Validated the table creation by running SQLite3
6. Ran into the problem reported at the beginning of this post.

What are my options for extricating myself from this situation?

Thanks in advance,
Richard
Bill W. (Guest)
on 2008-11-16 00:50
(Received via mailing list)
Hi Richard,

RichardOnRails wrote:

> The cause seems clearly related to item 3 below.  What should
> I do to correct the situation.

Change Cvs.find(:all) to Cv.find(:all)

And yes, using a model name ending in 's' violates what it arguably
Rails'
most fundamental convention (by way of Active Record's fundamental role
in
Rails).  Model names are singular versions of table names (so change
app/models/cv.rb back if you haven't already).  The fix above is the
easiest
open to you and will have you swimming with the stream.  If you really
want
to go a different way, it's configurable.  Start with the pluralization
rules (Google is your friend).

HTH,
Bill

By way of background.
1. I created a Rails 2.0.2 Payroll application a few days ago.
2. I more recently upgraded Rails to 2.2, which required a couple
tweaks:
    a. The statement I used was:
    a. Removed the “config.action_view.cache_template_extensions”
reference
    b. Set RAILS_GEM_VERSION = '2.2.0'
3. Created new model, Cvs ... where there was one anomaly:
    a. The statement I used was:
        ruby script/generate scaffold Cvs filename:string created:date
modified:date imported:date
    b. The scaffold reported “create    app/models/cv.rb” instead of
cvs.rb
    c. I tried changing the name manually,  but that only introduced
more error msgs
4. “raked” the migrations
5. Validated the table creation by running SQLite3
6. Ran into the problem reported at the beginning of this post.

What are my options for extricating myself from this situation?

Thanks in advance,
Richard
RichardOnRails (Guest)
on 2008-11-16 04:02
(Received via mailing list)
Hi Bill,

Great answer ... just what I was hoping for:

Confirmation of my speculation and a Quick-and-dirty solution.  The
latter is important to my Rails education an a solution if I do that
by accident with a client looking over my shoulder (which I hope
starts happening in the Spring, despite the fact that I'm retired).

Thank you very much for the help.

Best wishes,
Richard

BTW:
1. I opted for restarting the development with a non-s-ending name.
2. I searched my faulty version for /cvs\./i and found two hits (with
more to come if I continued this version):
-- The one you mentioned in Payroll\app\controllers\cvs_controller.rb
-- 2nd and 3rd ones in Payroll\test\functional\cvs_controller_test.rb
This topic is locked and can not be replied to.