【问题标题】:Rails 3 inherited_resources ignores 'defaults' settingRails 3 inherit_resources 忽略“默认”设置
【发布时间】:2012-02-20 15:38:37
【问题描述】:

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

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

请帮忙。

【问题讨论】:

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


    【解决方案1】:

    问题是 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
    

    那么我认为您根本不需要将默认选项放在那里 - 它应该开箱即用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-31
      • 2012-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多