martes, 27 de octubre de 2015

Crear un projecto test para ver como funcionan las herencias dentro de un modelo (inheritance)

Voy a crear un  proyecto de cero para ver como y si funcionan las herencias dentro de las classes de un determinado modelo.

Asi que:


rails new single_t_inheritance_rails_test

ahora genero un modelo con scaffold generators:

rails generate model Setup setup_installations:string type:string
Es la forma más fácil de crear un proyecto.

Ahora migramos la base de datos:

bundle exec rake db:migrate

Vamos a usar herencias dentro del modelo, aquí esta la explicación en ingles con otro ejemplo


Ahora queremos migrar de un supuesto producto 1 en nombre del cliente. que seria, Customer, por ejemplo.

rails generate migration AddCustomerToProduct1Setup

Y vamos a:
db/migrations/add_customer...setup.rb
cambiamos.

def change 
  add_column :setups :customer :string 
end

bundle exec rake db:migrate

*tambien podemos hacer bundle exec rake:rollback y poner el nuevo atributo dentro de la primera migración, lo hago así para que saber como hacer en caso de que queramos agregar más atributos.

Una vez tenemos migrados los datos tenemos que crear las classes heredadas(Inherit classes).
En este caso.

single_t_inheritance_rails_test/app/models/product_1.rb

Y adentro

class Product_1 < Setup
  attribute_accessor :customer
end
Y Ahora podemos probar si funciona en la consola dentro de la terminal y nuestro proyecto:

rails console

Setup.create(setup_installations:"instalation 4")
Funciona.
Setup.create(customer:"New Customer 1")
protected attribute....
No tendria que funcionar
Es correcto! No podemos guardarlo por que solo podemos acceder si creamos una nueva clase.

Setup.create(customer:"New Customer 1")
Funciona!

Ahora ya sabes como crear herencias :). Ahun así ten en cuenta los pros y contras de estas.



No hay comentarios:

Publicar un comentario