Question

I'm using Inherited resources for my controllers. And now i have model:

class Sms < ActiveRecord::Base
end

And i want controller for it, where i make defaults:

class Admin::SmsesController < Admin::InheritedResources
  defaults :resource_class => Sms,
           :collection_name => 'smses',
           :instance_name => 'sms'
end

but i can not understand, why it still trying to get "Smse" model:

NameError in Admin::SmsesController#index
uninitialized constant Smse

Pls help.

Was it helpful?

Solution

The problem is that Rails doesn't know that the plural of Sms is Smses. If you go to the Rails console you should see that:

> "Sms".pluralize
 => "Sms"

> "Smses".singularize
 => "Smse"

When faced with a plural it doesn't recognise, singularize just truncates the final "s", which is why your app is looking for a nonexistent Smse model.

You will save yourself a lot of headaches by configuring Rails to pluralize/singularize your models correctly. In the file config\initializers\inflections.rb you should find some examples of how to do this. What you want is:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.irregular 'sms', 'smses'
end

Then I don't think you should need to put the defaults option in there at all - it should all work out of the box.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top