我的控制器使用继承的资源。现在我有了型号:
class Sms < ActiveRecord::Base
end
我想要它的控制器,在那里我做默认:
class Admin::SmsesController < Admin::InheritedResources
defaults :resource_class => Sms,
:collection_name => 'smses',
:instance_name => 'sms'
end
但我不明白,为什么它仍然试图得到"Smse"模型:
NameError in Admin::SmsesController#index
uninitialized constant Smse
请帮忙。
问题是Rails不知道Sms的复数是Smses。如果你去Rails控制台,你应该会看到:
> "Sms".pluralize
=> "Sms"
> "Smses".singularize
=> "Smse"
当遇到它无法识别的复数时,单数只会截断最后的"s",这就是为什么你的应用程序正在寻找一个不存在的Smse模型。
通过将Rails配置为正确地对模型进行复数/单数,您将省去很多麻烦。在config\initializers\infections.rb文件中,您应该可以找到一些如何做到这一点的示例。你想要的是:
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'sms', 'smses'
end
那么我认为你根本不应该把默认选项放在那里——这一切都应该开箱即用。