1

我正在为我的控制器使用继承的资源。现在我有模型:

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

请帮忙。

4

1 回答 1

2

问题是 Rails 不知道 Sms 的复数形式是 Smses。如果您转到 Rails 控制台,您应该会看到:

> "Sms".pluralize
 => "Sms"

> "Smses".singularize
 => "Smse"

当遇到它无法识别的复数时,单数化只会截断最后的“s”,这就是为什么您的应用正在寻找不存在的 Smse 模型的原因。

通过将 Rails 配置为正确地对模型进行复数/单数化,您将省去很多麻烦。在 config\initializers\inflections.rb 文件中,您应该找到一些如何执行此操作的示例。你想要的是:

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

那么我认为你根本不需要把默认选项放在那里——它应该都是开箱即用的。

于 2012-07-18T11:11:24.797 回答