Rails 3 наследует_ресурсы игнорирует настройку "по умолчанию"

Я использую унаследованные ресурсы для своих контроллеров. И теперь у меня есть модель:

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 ответ

Решение

Проблема в том, что Rails не знает, что множественное число Sms - это Smses. Если вы перейдете на консоль Rails, вы должны увидеть, что:

> "Sms".pluralize
 => "Sms"

> "Smses".singularize
 => "Smse"

Когда он сталкивается с множественным числом, которое он не распознает, singularize просто усекает последние "s", поэтому ваше приложение ищет несуществующую модель Smse.

Вы избавите себя от множества головных болей, настроив Rails для правильной множественной / сингулярной модели. В файле config\initializer \inflections.rb вы найдете несколько примеров того, как это сделать. То, что вы хотите, это:

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

Тогда я не думаю, что вам вообще нужно вводить опцию по умолчанию - все должно работать "из коробки".

Другие вопросы по тегам