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