5

I wprowadziły pojedynczej tabeli dziedziczenia dla klasy osobaPęknięte szyny Trasy po wdrożeniu pojedynczej tabeli dziedziczenia

class Person < ActiveRecord::Base 

end 


class Teacher < Person 

end 

class Student < Person 

end 

class Outsider < Person 

end 

i osoba tworzyć wydaje się działać tworząc nauczyciel, student lub osoba stosownie do tego, co jest wybierany w formie .select i atrybut type został dodany.

, wydaje mi się jednak, że złamane trasy

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

Wygląda na to, że wskazują ścieżkę teacher_path, ścieżkę student_path i outsider_path zamiast ścieżki person_path.

Jakie zmiany należy wprowadzić na trasach?

Odpowiedz

2

najpierw wygenerować sterowników dla swoich modeli ...

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

następnie w routes.rb (szyny 3)

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

daje odpocząć trasy

np

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"} 

takie same dla nauczycieli, studentów i outsidera

dróg check natarcia lub natarcia tras | grep teachers

+2

nie chcę różnych sterowników dla każdego – Arc

+0

więc tracisz REST dodać w routes.rb meczu „nauczyciele /” => „Osoby Wskaźnik”: a => Nauczyciele meczu „/ nauczyciela: id (.: format) "=>" persons # show ",: as =>: teachers i tak dalej ... – codevoice

+1

to działa, ale wcale nie jest SUCHA - w końcu powtarzasz cały kod kontrolera, i kod widzenia w kółko dla każdej podklasy – Tilo

1

Z mojego doświadczenia wynika, że ​​lepiej jest używać pojedynczego kontrolera dla wszystkich modeli STI. Jeśli utrzymujesz swoje kontrolery w stanie SUWEGO, nie powinieneś potrzebować logiki unikalnego sterownika dla każdej klasy dziecka. Zachowaj to wszystko w modelach.

resources :people 

nazwanych trasy będzie jak:

people_path 
new_person 
edit_person 
person 
etc... 

Następnie można użyć tego samego kontrolera/widoki zarządzać tych modeli. Jeśli później zdecydujesz się dodać nowe modele Person STI, nie będziesz musiał dokonywać żadnych istotnych aktualizacji swojego kodu.

+2

To wydaje się nie działać. Dla <% = link_to 'Edycja', edit_person_path (@deal)%> próbuje znaleźć edit_teacher_path (@user) i kończy się niepowodzeniem – Arc

+0

borykałem się z tym właśnie teraz .. Chcę traktować moje pod-modele znacznie inaczej w widokach i wolałbyś nie mieć garści logiki warunkowej ani w kontrolerze, ani w widoku .. myśli? –