Si tengo un usuario y quiero hacer diferentes tipos de usuarios, digamos solo usuarios normales con solo un correo electrónico y suscriptores que tienen un campo de sitio web, ¿cómo haría que los suscriptores hereden todo de los usuarios con solo un agregado ¿campo?Rails Model Herencia
Respuesta
Debería crear una tabla con todos los campos, así como especificar una columna de tipo. es decir
create_table :users do |t|
t.string :email
t.string :website
t.string :type
end
A continuación, puede tener clases como
Class User < ActiveRecord::Base
Class Subscriber < User
Un suscriptor heredará todo, desde el modelo usuarios. La columna tipo está allí para que pueda distinguir de los diferentes modelos. Por ejemplo, utilizando
Subscriber.all
sólo obtener suscriptores, donde como si no utiliza la columna 'tipo' también sería encontrar usuarios también.
Quiere single table inheritance, se describe en el enlace de Alex Reisner. STI usa una sola tabla para representar varios modelos que heredan de un modelo base. En el mundo de Rails, el esquema de la base de datos tiene una columna que especifica el tipo de modelo representado por la fila. Agregar una columna llamada type
en una migración de base de datos hace que Rails infiera que la tabla usa STI, aunque la columna puede ser un nombre arbitrario si especifica el nombre en el modelo de datos (consulte class method 'inheritance_column'). Tenga en cuenta que esto hace que type
sea una palabra reservada.
Eso está roto. Creo que el enlace correcto es [http://www.alexreisner.com/code/single-table-inheritance-in-rails](http://www.alexreisner.com/code/single-table-inheritance-in-rails) –
Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. – Luke
@Luke: siempre que la "respuesta única de la tabla" sea la respuesta, eso no es exactamente solo un enlace. –
- 1. before_create in rails model
- 2. Django Model Herencia. Ocultar o eliminar campos
- 3. Lista activada de Rails ActiveRecord Model
- 4. rails model has_many: a través de asociaciones
- 5. Rails Model method self. vs plain
- 6. Pasar parámetros adicionales a Rails Generate Model?
- 7. Rails Modelo de herencia en formularios
- 8. Rails 3 HABTM encontró por registro asociado atributo model
- 9. Rails Naming Model: arreglar o dejar como está
- 10. Cómo llamar a expire_fragment desde Rails Observer/Model?
- 11. Understanding Rails ActiveRecord "single model" se une a sí mismo
- 12. ¿Cuándo usar self en Model?
- 13. Spec RSpec model attribute setter
- 14. Herencia de Tabla de Clase en Rails 3
- 15. Herencia simple mesa y dónde usarlo en Rails
- 16. ¿Cómo implementar la herencia Active Record en Ruby on Rails?
- 17. PHP Domain Model
- 18. @Model anotación y MVC
- 19. D-Bus threading model
- 20. 3D Character/Model Creator
- 21. Stripes MVC Model Data
- 22. Django model iterate fields
- 23. Extjs Model Fields with Subfields
- 24. Java GUI Swing Model Explicación
- 25. C# mvc model vs viewbag
- 26. DDD Domain Model Complex Validation
- 27. Haskell vs. Python threading model
- 28. Confundido con Model vs ViewModel
- 29. ¿Qué es Model View Presenter?
- 30. ASP.NET MVC Model/ViewModel Validation
OP: Esto se llama "herencia de tabla única" o "STI". Así que busca eso para obtener más información sobre cómo funciona si lo necesitas. – Pavling
Después de hacer un poco de búsqueda de Google sobre el tema, algunos también parecen preferir el uso de asociaciones polimórficas cuando los datos difieren entre los modelos. Esto evita tener una sola tabla con muchos campos nulos. Encontré útil este enlace: http://railscasts.com/episodes/394-sti-and-polymorphic-associations. – rogerkk
¿Qué valor real debería tener la columna de tipo? –