5

he implementado única herencia de tablas para una clase de personavías rotas rutas tras la aplicación de la tabla herencia simple

class Person < ActiveRecord::Base 

end 


class Teacher < Person 

end 

class Student < Person 

end 

class Outsider < Person 

end 

Y la persona crear parece que funciona creando profesor, estudiante o persona de acuerdo con el qué se elige en forma .select y se agrega el atributo de tipo.

Sin embargo, me parece que han roto las rutas

<% = link_to 'Editar', edit_person_path (@deal)%> | <% = link_to 'Atrás', vía_personas%>

Parece que apuntan a teacher_path, student_path y outsider_path en lugar de a la ruta_personal.

¿Qué cambios se deben realizar en las rutas?

Respuesta

2

primera generación de controladores para sus modelos ...

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

después en routes.rb (carriles 3)

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

dará reposo rutas

por ejemplo,

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

la misma para el profesor, alumno y extraño

rutas cheque rastrillo rastrillo o rutas | grep teachers

+2

No quiero controladores diferentes para cada uno – Arc

+0

por lo que perderá RESTO poner en routes.rb partido 'maestros /' => "# personas índice",: => como: maestros partido 'maestro /: id (.: formato) '=> "personas # show",: as =>: maestros y así sucesivamente ... – codevoice

+1

esto funciona, pero no es SECO en absoluto - terminará repitiendo todo el código del controlador, y el código de vista una y otra vez para cada subclase – Tilo

1

Desde mi experiencia, es mejor usar un solo controlador para todos los modelos de STI. Si mantiene sus controladores SECOS, no debería necesitar tener una lógica de controlador única para cada clase secundaria. Mantenga todo eso en los modelos.

resources :people 

Sus rutas con nombre será como:

people_path 
new_person 
edit_person 
person 
etc... 

continuación, puede utilizar el mismo controlador/vistas a gestionar estos modelos. Si luego decide agregar nuevos modelos Person STI, no tendrá que hacer ninguna actualización significativa de su código.

+2

Esto no parece funcionar. Para <% = link_to 'Edit', edit_person_path (@deal)%> trata de encontrar edit_teacher_path (@user) y falla el – Arc

+0

que estaba luchando con esto solo ahora .. Quiero tratar mis submodelos de manera significativamente diferente en las vistas y preferiría no tener un montón de lógica condicional en el controlador o en la vista ... ¿pensamientos? –

Cuestiones relacionadas