2016-12-01 3 views
0

У меня есть модель STI, которая имеет более 20 подклассов, и мне нужно указать все их на родительский контроллер на моих маршрутах. Я определял каждый из них в маршрутах, но это действительно неэффективно, а не СУХОЙ. Вот как это выглядит сейчас.DRY Маршруты для одного контроллера Rails 4 STI Model

resources :red_master_models, :controller => 'master_models' 
    resources :green_master_models, :controller => 'master_models' 
    resources :yellow_master_models, :controller => 'master_models' 
    resources :purple_master_models, :controller => 'master_models' 
    resources :orange_master_models, :controller => 'master_models' 
    resources :grey_master_models, :controller => 'master_models' 
    resources :indigo_master_models, :controller => 'master_models' 
    resources :blue_master_models, :controller => 'master_models' 

Мне кажется, что я должен быть в состоянии зацикливать все подклассы и определить его более просто. Это то, что я пробовал ... но это не работает.

MasterModel.subclasses.each do |master_model| 
    resources master_model.name.underscore.to_sym, :controller => 'master_models' 
    end 

ответ

0

Это, вероятно, не работает, потому что подклассы MasterModel не были автоматически загружены еще, так что метод просто возвращает пустой массив. Попробуйте явно потребовать модели выше вашего цикла и посмотреть, что произойдет.

+0

Каков синтаксис, требующий моих моделей? – NothingToSeeHere

+0

Я искал, как явно требуют модели, и я в недоумении. У вас есть понимание? – NothingToSeeHere

+0

Извините, не видел твой первый комментарий. Только для целей тестирования теории я бы сделал это сначала: 'puts 'here' MasterModel.subclasses.each do | master_model | puts master_model.to_s Ресурсы master_model.name.underscore.to_sym,: controller => 'master_models' end ' – Brad