STI y múltiples vistas

Hola,

Tengo varios tipos de categorías para diferentes modelos, separadas
estas en varios modelos heredando del modelo Categoría:

 1. # app/models/categoy.rb
 2. class Category <  ActiveRecord::Base
 3.   validates_presence_of :code, :name
 4.   validates_numericality_of :code
 5. end
 6.
 7. # app/models/categoy.rb
 8. class Example1 < Category
 9. ...
10. end
11.
12. # app/models/categoy.rb
13. class Example2 < Category
14. ...
15. end
16.
17. # app/models/categoy.rb
18. class Example3 < Category
19. ...
20. end

La idea es tener 1 sólo controlador con las 7 acciones típicas de CRUD,
pero quiero tener múltiples vistas.

Cómo puedo hacer esto? Conocéis algún libro, post, manual que explique
bien STI? Alguna implementación??

Gracias por adelantado.


Juan José Vidal [email protected]

On Fri, Sep 12, 2008 at 00:20, Juan José Vidal [email protected] wrote:

5. end

Cómo puedo hacer esto? Conocéis algún libro, post, manual que explique
bien STI? Alguna implementación??

Gracias por adelantado.

Imagino que te refieres que quieres un formulario diferente para cada
clase (y quizás un show/index diferente). Una vez hice algo de eso (en
tiempos de Rails 1, así que ahora puede que haya una mejor manera…
seguro que la había incluso entonces)

En mi caso, por ejemplo en el show existía un show.rhtml donde estaba
toda la parte común (información sobre los atributos que comparten
todas las clases del STI), y luego se realizaba un render :partial, y
el nombre del partial se obtenia de la clase del objeto sobre el que
se realizaba el show:

render :partial => @category.class.to_s.underscore

De esa forma tenía partials _example_1.rhtml, _example_2.rhtml,
etcétera, cada uno con su información especifica de cada clase.

El funcionamiento es similar para las vistas de new y edit.

Ventajas: Si añades otra clase no tienes que cambiar nada, simplemente
añades otro partial. Desventajas: Los nombres de los partial y las
clases están muy acoplados, si cambias uno debes cambiar el otro (no
es que pase muchas veces).

No se, quizá te sirva.

Suerte.