bad model name

I created model named "whats_new".

$ script/generate model whats_new
      exists app/models/
      exists test/unit/
      exists test/fixtures/
      create app/models/whats_new.rb
      create test/unit/whats_new_test.rb
      create test/fixtures/whats_news.yml
      exists db/migrate
      create db/migrate/*****_create_whats_news.rb

I created model named "whats_new".

$ script/generate model whats_new
     exists app/models/
     exists test/unit/
     exists test/fixtures/
     create app/models/whats_new.rb
     create test/unit/whats_new_test.rb
     create test/fixtures/whats_news.yml
     exists db/migrate
     create db/migrate/*****_create_whats_news.rb

-----

rake db:migrate
WhatsNew.find()
WhatsNew.new

There are no problem.

However,
test/unit/whats_new_test.rb
-----------------
whats_news(:data1)
-----------------
=> "No class attached to find."

-----------------------------------------------
class Fixtures
...
def initialize
...
@class_name = class_name ||
                 (ActiveRecord::Base.pluralize_table_names ?
@table_name.singularize.camelize : @table_name.camelize)
p @class_name
...
end
-----------------------------------------------
=> "WhatsNews"
A true class name is "WhatsNew".

@table_name == "whats_news"

"whats_news".singularize.camelize

=> "WhatsNews"

"whats_new".pluralize.singularize

=> "whats_news"

By the way, I cannot speak English...

In english, 'news' is both singular and plural. A single news item is still called 'news' not 'new'.

Two choices for you..

- Add your own inflection so that 'news' is singularlized to 'news'.
- Change your class name.

-philip

Philip Hallstrom wrote:

Two choices for you..

- Add your own inflection so that 'news' is singularlized to 'news'.
- Change your class name.

Keep in mind that model names should be nouns. Controller actions are
verbs. In your case of WhatsNew is practically a complete sentence.
"What is new?" Maybe use something like NewsItem or simply News, which
rails will properly pluralize as "News." In this case the table name
will be news.

Then to find out, "What is new?" you can create a named_scope that gets
recent new items like this:

@recent_news_items = NewsItem.recent

or

@recent_news_items = News.recent

Thank you for everybody.

I change the class name.

Robert Walker wrote:

@recent_news_items = NewsItem.recent

or

@recent_news_items = News.recent

It did not hit on in me.
"What is new?" is in "News".

P.S.
I added
rails/lib/rails_generator/generators/components/model/
model_generator.rb

to

p 'warning: class_name' unless class_name ==
class_name.pluralize.singularize