Rails 3 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

Пожалуйста, помогите.


person BazZy    schedule 20.02.2012    source источник


Ответы (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

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

person Andrew Haines    schedule 18.07.2012