Маршруты Broken Rails после реализации однонаправленного наследования

Я реализовал одиночное наследование таблицы для класса person

class Person < ActiveRecord::Base

end


class Teacher < Person

end

class Student < Person

end

class Outsider < Person

end

И создающий человек, похоже, работает с созданием Учителя, Студента или Лица в соответствии с тем, что выбрано в форме. Выберите и добавлен атрибут типа.

Однако я, кажется, сломал маршруты

<% = link_to 'Edit', edit_person_path (@deal)% > | <% = link_to 'Back', persons_path% >

Кажется, что они указывают на path_path, student_path и outsider_path вместо person_path.

Какие изменения необходимо внести в маршруты?

Ответ 1

сначала создайте контроллеры для ваших моделей...

rails generate controller Persons
rails generate controller Teachers
rails generate controller Students
rails generate controller Outsiders

то в routes.rb(рельсы 3)

resources :persons
resources :teachers
resources :students
resources :outsiders

предоставляет маршруты REST

например.

persons GET    /persons(.:format) {:action=>"index", :controller=>"persons"}
new_person GET    /person/new(.:format) {:action=>"new", :controller=>"persons"}
edit_person GET    /persons/:id/edit(.:format) {:action=>"edit", :controller=>"persons"}
person GET    /persons/:id(.:format) {:action=>"show", :controller=>"persons"} 
persons POST   /spersons(.:format) {:action=>"create", :controller=>"persons"}    
person PUT    /persons/:id(.:format) {:action=>"update", :controller=>"persons"}    
person DELETE /persons/:id(.:format) {:action=>"destroy", :controller=>"persons"}

то же самое для учителя, ученика и аутсайдера

проверить маршруты рейка или рейк-маршруты | учителя греков

Ответ 2

По моему опыту, лучше использовать один контроллер для всех моделей STI. Если вы держите свои контроллеры DRY, вам не нужно иметь уникальную логику контроллера для каждого дочернего класса. Храните все это в моделях.

resources :people

Ваши именованные маршруты будут такими:

people_path
new_person
edit_person
person
etc...

Затем вы можете использовать один и тот же контроллер/представления для управления этими моделями. Если позже вы решите добавить новые модели Person STI, вам не придется делать какие-либо существенные обновления для вашего кода.