Tendré una clase Person que tendrá Contactos.
class Contacto
#esto es el constructor
def initialize (params = {})
end
end
class Person < ActiveRecord::Base
attr_accessor :lista #ya te genera getter y setter... te crean el @lista , person.lista y person.lista=
#attr_reader :lista #así te haría el get ... person.lista
#attr_writer :lista #así te haría el set ... person.lista=
#@lista = [] #es un atributo vacío, entonces tendría que declarar un getter y un setter
validates_presence_of :name, :message => 'No puede estar en blanco'
has_many :phones
#esto es el constructor de persona
def initialize (parametros = {})
#debo borrar contactos para poder llamar luego al constructor de la clase base
@lista = parametros.delete[:contactos] #al borrar, te devuelve los valores
super parametros # llamada al constructor de la clase base
end
end
Este blog va de pequeñas 'notas' sobre cosas que hago en mi trabajo, desde trozos de código, noticias que me impacten, informática, java, struts, ruby, programación, cmmi, gestión de proyectos.
Mostrando entradas con la etiqueta rails. Mostrar todas las entradas
Mostrando entradas con la etiqueta rails. Mostrar todas las entradas
domingo, 9 de noviembre de 2008
sábado, 8 de noviembre de 2008
BBDD en Ruby
Relación 1 a muchos
Pongamos que tenemos una persona que tiene muchos teléfonos
# una migración para crear una persona con su nombre
class CreatePeople < ActiveRecord::Migration
def self.up
create_table :people do |t|
t.column :name, :string
end
end
def self.down
drop_table :people
end
end
#una migración para indicar que existe la tabla teléfono y que una persona tiene muchos teléfonos.
class CreatePhones < ActiveRecord::Migration
def self.up
create_table :phones do |t|
t.column :number, :string
t.column :perdon_id, :integer
end
end
def self.down
drop_table :phones
end
end
#### ahora en los modelos
class Person < ActiveRecord::Base
has_many :phones # una persona tiene muchos teléfonos :phones
# has_many :telefonos, :class_name => "Phone"
# has_one :phone #una persona tiene un teléfono ...el nombre de :phone es el nombre del modelo
end
class Phone < ActiveRecord::Base
belongs_to :person #un teléfono pertenece a una persona.
end
Nota
.-Donde tienes un has_one o un has_many, del otro lado hay un belongs_to
.-Si la relación es de muchos a muchos, ponemos en los dos modelos el has_and_belongs_to_many (en plural)
.-Cuando es de muchos a muchos, tienes que crear una tabla en bbdd cuya convención sea tabla1_tabla2, donde están ordenadas alfabéticamente. Ejemplo: people_phones y luego es person_id, phone_id
.-Cuando hablamos de relaciones en ruby on rails, se tratan en arrays
Pongamos que tenemos una persona que tiene muchos teléfonos
# una migración para crear una persona con su nombre
class CreatePeople < ActiveRecord::Migration
def self.up
create_table :people do |t|
t.column :name, :string
end
end
def self.down
drop_table :people
end
end
#una migración para indicar que existe la tabla teléfono y que una persona tiene muchos teléfonos.
class CreatePhones < ActiveRecord::Migration
def self.up
create_table :phones do |t|
t.column :number, :string
t.column :perdon_id, :integer
end
end
def self.down
drop_table :phones
end
end
#### ahora en los modelos
class Person < ActiveRecord::Base
has_many :phones # una persona tiene muchos teléfonos :phones
# has_many :telefonos, :class_name => "Phone"
# has_one :phone #una persona tiene un teléfono ...el nombre de :phone es el nombre del modelo
end
class Phone < ActiveRecord::Base
belongs_to :person #un teléfono pertenece a una persona.
end
Nota
.-Donde tienes un has_one o un has_many, del otro lado hay un belongs_to
.-Si la relación es de muchos a muchos, ponemos en los dos modelos el has_and_belongs_to_many (en plural)
.-Cuando es de muchos a muchos, tienes que crear una tabla en bbdd cuya convención sea tabla1_tabla2, donde están ordenadas alfabéticamente. Ejemplo: people_phones y luego es person_id, phone_id
.-Cuando hablamos de relaciones en ruby on rails, se tratan en arrays
Breve resumen proyecto en Ruby on Rails
Estaba haciendo unas pruebas en ruby on rails, y creando mi primer proyecto con el Aptana.
Enlace de interés: Api de Ruby On Rails http://api.rubyonrails.org/
...............
Carpetas
Proyecto -> config -> database.yml es donde están las configuraciones
Proyecto -> config -> enviroment.rb están una pluralizaciones en castellano.
NombreProyecto_nombreentorno
en vendor irán los plugins para el proyecto: ejemplo, calendarios para javascript, para subir imágenes.... Un plugin es como un mini-proyecto, porque vuelve luego a repetir la estructura base de un proyecto normal.
En plugins, irían por ejemplo miniaplicaciones, como encuestas, gestión de menús,...
la carpeta app, es el grueso de la caballería, en realidad es donde está la estructura del modelo vista controlador.
controllers: la base de los controladores es application.rb
helpers: los helper son para escribir código html, ejemplo para construir un enlace parametrizados, son usadas en las vistas.
Dentro del fichero application_helper.rb haces métodos, es común a todas las vistas de la aplicación.
models: tendremos los modelos de la lógica de negocio
views: las vistas de cada controlador
Dentro de layouts, estarán las disposiciones de las vistas. Tiene los elementos, ejemplo, menús.
En aptana, en show view, hay generator, es para scaffold:
Parameter: person (es el nombre del modelo=clase).
Generator: model
Bases de Datos
db -> migrate
ahí están los ficheros de migración, es decir, de "actualizaciones" en la bbdd
def self.up
create_table :people do |t|
t.column :name, :string //es el nombre de la columna, y luego el tipo de la columna
end //del do
end //en del def
para migrar la bbdd:
en aptana: una view que se llama Rake Tasks
Task: db:migrate , si no le pasas ningún parámetro, le dices la versión a la que está y va hacia adelante.
VERSION=6 iría a la migración 6 y de ahí hacia adelante
Las migraciones se ejecutan consecutivas, si te falta una, lo ignora.
Entonces, con la 1ra migración se crea también la tabla schema_info que almacena el número de la migración en la que está.
Scaffold:
En el aptana View->Generator
Generator: Scaffold
Parameters: selecciono nombre del modelo
Va a buscar en bbdd, la tabla asociada a person, es decir, busca el plural de person (people). El controlador es de people también, es decir, en plural.
Salvo que digamos lo contrario el controlador people, usará el layout people.rhtml (que está en views-> layouts) y la carpeta people que estaría a people
En un controller, dentro de un def
render :layout=>principal //busca otro layout
render :action=>show //busca otra vista
Las variables con arroba, se ven desde la vista, y es local al método.
Si lleva dos arrobas, sería global a PeopleController
Enlace de interés: Api de Ruby On Rails http://api.rubyonrails.org/
...............
Carpetas
Proyecto -> config -> database.yml es donde están las configuraciones
Proyecto -> config -> enviroment.rb están una pluralizaciones en castellano.
NombreProyecto_nombreentorno
en vendor irán los plugins para el proyecto: ejemplo, calendarios para javascript, para subir imágenes.... Un plugin es como un mini-proyecto, porque vuelve luego a repetir la estructura base de un proyecto normal.
En plugins, irían por ejemplo miniaplicaciones, como encuestas, gestión de menús,...
la carpeta app, es el grueso de la caballería, en realidad es donde está la estructura del modelo vista controlador.
controllers: la base de los controladores es application.rb
helpers: los helper son para escribir código html, ejemplo para construir un enlace parametrizados, son usadas en las vistas.
Dentro del fichero application_helper.rb haces métodos, es común a todas las vistas de la aplicación.
models: tendremos los modelos de la lógica de negocio
views: las vistas de cada controlador
Dentro de layouts, estarán las disposiciones de las vistas. Tiene los elementos, ejemplo, menús.
En aptana, en show view, hay generator, es para scaffold:
Parameter: person (es el nombre del modelo=clase).
Generator: model
Bases de Datos
db -> migrate
ahí están los ficheros de migración, es decir, de "actualizaciones" en la bbdd
def self.up
create_table :people do |t|
t.column :name, :string //es el nombre de la columna, y luego el tipo de la columna
end //del do
end //en del def
para migrar la bbdd:
en aptana: una view que se llama Rake Tasks
Task: db:migrate , si no le pasas ningún parámetro, le dices la versión a la que está y va hacia adelante.
VERSION=6 iría a la migración 6 y de ahí hacia adelante
Las migraciones se ejecutan consecutivas, si te falta una, lo ignora.
Entonces, con la 1ra migración se crea también la tabla schema_info que almacena el número de la migración en la que está.
Scaffold:
En el aptana View->Generator
Generator: Scaffold
Parameters: selecciono nombre del modelo
Va a buscar en bbdd, la tabla asociada a person, es decir, busca el plural de person (people). El controlador es de people también, es decir, en plural.
Salvo que digamos lo contrario el controlador people, usará el layout people.rhtml (que está en views-> layouts) y la carpeta people que estaría a people
En un controller, dentro de un def
render :layout=>principal //busca otro layout
render :action=>show //busca otra vista
Las variables con arroba, se ven desde la vista, y es local al método.
Si lleva dos arrobas, sería global a PeopleController
Suscribirse a:
Entradas (Atom)