Сломанные рельсовые маршруты после реализации наследования одной таблицы - PullRequest
5 голосов
/ 13 декабря 2010

Я реализовал наследование одной таблицы для класса персонажа

class Person < ActiveRecord::Base

end


class Teacher < Person

end

class Student < Person

end

class Outsider < Person

end

И созданный человек, кажется, работает над созданием Учителя, Студента или Человека в соответствии с тем, что выбрано в form.select и атрибутом типа

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

<% = link_to 'Редактировать', edit_person_path (@deal)%> |<% = link_to 'Back', people_path%>

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

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

Ответы [ 2 ]

2 голосов
/ 13 декабря 2010

первые генераторы контроллеров для ваших моделей ...

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

затем в rout.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"}

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

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

1 голос
/ 14 декабря 2010

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

resources :people

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

people_path
new_person
edit_person
person
etc...

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

...