Маршруты 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, вам не придется делать какие-либо существенные обновления для вашего кода.