Rails 3 inherited_resources忽略'defaults'设置

时间:2012-02-20 15:38:38

标签: ruby-on-rails-3 ruby-on-rails-3.2 inherited-resources

我正在为控制器使用Inherited resources。现在我有模特:

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

请帮助。

1 个答案:

答案 0 :(得分: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

然后我认为你根本不需要在那里放置默认选项 - 它应该都是开箱即用的。