From da09ff040a2250c7dd5649ee60647c14f83a44b6 Mon Sep 17 00:00:00 2001 From: Julio Javier Cicchelli Date: Wed, 14 Jan 2009 17:57:06 +0100 Subject: [PATCH] Translated the existing content of the chapter 3. --- .../1-dm-setting-up.markdown | 76 ++++++- .../2-dm-schema.markdown | 95 +++++++- .../3-dm-queries.markdown | 215 +++++++++++++++++- .../4-dm-relationships.markdown | 9 +- .../5-dm-migrations.markdown | 86 ++++++- .../6-dm-validations.markdown | 9 +- .../toc.markdown | 19 +- 7 files changed, 492 insertions(+), 17 deletions(-) diff --git a/book-content/es/3-interacting-with-the-database/1-dm-setting-up.markdown b/book-content/es/3-interacting-with-the-database/1-dm-setting-up.markdown index 99043762..58d24a2b 100644 --- a/book-content/es/3-interacting-with-the-database/1-dm-setting-up.markdown +++ b/book-content/es/3-interacting-with-the-database/1-dm-setting-up.markdown @@ -1 +1,75 @@ -#Setting Up DataMapper \ No newline at end of file +# Configurando DataMapper + +* Esto será una tabla de contenidos (este texto será pegado). +{:toc} + +## Configurando las opciones de la base de datos +La configuración de la base de datos reside +en el archivo ``config/database.yml``. + +Si usted desea utilizar [SQLite3][] para todo tipo de uso, +(ya sea para desarrollo, pruebas y producción) +entonces usted no debe modificar el archivo mencionado. +Pase a la siguiente sección. + +### Todo MySQL +En el caso que usted desee utilizar [MySQL][] para todo uso +entonces debe localizar el siguiente código: + + development: &defaults + # Estas son las configuraciones para el repositorio :default + adapter: sqlite3 + database: ejemplo_desarrollo.db +{:lang=ruby html_use_syntax=true} + +y modificar su contenido de la siguiente manera + + development: &defaults + adapter: mysql + database: ejemplo_desarrollo + username: usuario + password: contrasenia + host: localhost +{:lang=ruby html_use_syntax=true} + +A decir verdad, todas las opciones a excepción del adaptador y del host +pueden ser definidas de la manera que usted crea mas conveniente. +el único requisito es que la base de datos MySQL +debe reconocer al usuario que desea conectarse. + +### MySQL en ambiente de producción +En el caso de que usted desee utilizar MySQL +en un ambiente de producción solamente, +entonces usted debe modificar la sección "production" +del archivo de configuración de la base de datos +de la siguiente manera: + + production: + <<: *defaults + database: produccion.db +{:lang=ruby html_use_syntax=true} + +a + + production: + adapter: mysql + database: ejemplo_desarrollo + username: usuario + password: contraseña + host: localhost +{:lang=ruby html_use_syntax=true} + +#### NOTA +Ambos motores de base de datos mencionados previamente +se diferencian entre si debido a pequeñas diferencias. +MySQL puede obtener errores al utilizar cierto tipos de datos +que SQLite3 no tiene. +Entonces es recomendable realizar pruebas a fin de asegurarse +que MySQL responde correctamente a todos los datos que usted +utilice en su aplicación antes de configurar la base de datos +en un ambiente de producción. + +TODO Describir el proceso para configurar otros motores de base de datos en Merb. + +[SQLite3]: ... +[MySQL]: ... diff --git a/book-content/es/3-interacting-with-the-database/2-dm-schema.markdown b/book-content/es/3-interacting-with-the-database/2-dm-schema.markdown index c9684d5e..5b52ff9f 100644 --- a/book-content/es/3-interacting-with-the-database/2-dm-schema.markdown +++ b/book-content/es/3-interacting-with-the-database/2-dm-schema.markdown @@ -1 +1,94 @@ -#Database Schema \ No newline at end of file +# Esquema de la base de datos + +* Esto será una tabla de contenidos (este texto será pegado). +{:toc} + +## Modelo + +### Creación de un Modelo + + $ merb-gen model NombreModelo +{:lang=shell html_use_syntax=true} + +### Abrir un Modelo + +Usted podrá encontrar el modelo recientemente creado +en la siguiente ubicación: ``MERB_ROOT/app/models/nombre_modelo.rb``. + +### Definir sus propiedades + +En [DataMapper][], usted no requiere generar archivos de migración +para la base de datos a fin de crear una tabla a la base de datos o +de agregar una columna a una tabla existente. +Aunque, para tareas mas avanzadas, usted los puede utilizar. + +A continuación se le presentara un modelo por defecto: + + class Persona + include DataMapper::Resource + + # Usted puede agregar las propiedades según sus requisitos. + property :id, Serial + property :nombre, Tipo, :opcion_1 => valor, :opcion_2 => valor + ... + + end +{:lang=ruby html_use_syntax=true} + +### Tipos de datos disponibles +DM-Core soporta los siguientes tipos de datos 'primitivos': + + * TrueClass, Boolean + * String + * Text + * Float + * Fixnum, Integer + * BigDecimal + * DateTime, Date, Time + * Object + * Discriminator (todo lo que necesite para Herencias Simples de Tablas) + +Si usted incluye la librería DM-Types, +los siguientes tipos de datos son soportados: + + * Csv + * Enum + * EpochTime + * FilePath + * Flag + * IPAddress + * URI + * Yaml + * Json + * BCryptHash + * Regex + +Para mas información relacionada a estos tipos de datos, +por favor referirse a la página [tipos de datos en DataMapper][]. + +Para mas especificaciones con respecto a las propiedades de un modelo, +por favor referirse a la pagina [definición de propiedades en DataMapper][]. + +### Migración a la base de datos + +Obviamente, usted debe terminar de definir sus propiedades primero. +En resumen, usted debe ejecutar el siguiente comando: + + $ rake db:create +{:lang=shell html_use_syntax=true} + +y luego ejecutar el comando + + $ rake db:automigrate +{:lang=shell html_use_syntax=true} + +El resultado de la ejecución de estos dos comandos +debe verse reflejado en la creación y/o actualización del esquema +de su base de datos. +Para mas información, por favor referirse a la sección [migraciones][]. + +[DataMapper]: ... +[tipos de datos en DataMapper]: http://datamapper.org/doku.php?id=dm-more:dm-types +[definición de propiedades en DataMapper]: http://datamapper.org/doku.php?id=docs:properties +[migraciones]: /interacting-with-the-database/dm-migrations + diff --git a/book-content/es/3-interacting-with-the-database/3-dm-queries.markdown b/book-content/es/3-interacting-with-the-database/3-dm-queries.markdown index 8dd2068f..40ac2d4f 100644 --- a/book-content/es/3-interacting-with-the-database/3-dm-queries.markdown +++ b/book-content/es/3-interacting-with-the-database/3-dm-queries.markdown @@ -1 +1,214 @@ -#Database Queries \ No newline at end of file +# Consultas a la base de datos + +* Esto será una tabla de contenidos (este texto será pegado). +{:toc} + +En esta sección se explicará en detalles cada una de las acciones +que su aplicación puede utilizar para manipular datos guardados en +su base de datos de elección. + +Para más información, por favor referirse a la página [acciones en DataMapper][]. + +## Crear +A fin de crear una nueva entrada en su base de datos, +se recomendable seguir la siguiente secuencia: + +### Instancia nueva +Primero, usted debe crear una nueva instancia de su modelo. + + nombre_modelo = NombreModelo.new +{:lang=ruby html_use_syntax=true} + +### Definir sus atributos +Luego, usted debe definir los atributos +referentes a la instancia creada en una colección: + + nombre_modelo.attributes = {:atributo_1 => valor_1, :atributo_2 => valor_2} +{:lang=ruby html_use_syntax=true} + +Alternativamente, usted puede definirlos uno a uno si así lo desea: + + nombre_modelo.atributo_1 = valor_1 + nombre_modelo.atributo_2 = valor_2 +{:lang=ruby html_use_syntax=true} + +### Salvar la instancia +Ahora, usted debe guardarla de la siguiente manera: + + nombre_modelo.save +{:lang=ruby html_use_syntax=true} + +### Resultado de la validación +El interprete retornará el valor ``true`` en el caso que la instancia +haya sido guardada correctamente en la base de datos, +luego de haber pasado todas las validaciones de datos definidas, + + nombre_modelo.save + # => true +{:lang=ruby html_use_syntax=true} + +En el caso en el cual una o mas validaciones no hayan sido exitosas, +El interprete retornará el valor ``false`` . + + nombre_modelo.save + # => false +{:lang=ruby html_use_syntax=true} + +#### Errores +Ante el caso de falla, el siguiente método le brindará una lista +que contendrá los mensaje de error relacionados a cada falla encontrada. + + nombre_modelo.errors +{:lang=ruby html_use_syntax=true} + +## Leer + +Para más información, por favor referirse a la página [buscadores en DataMapper][]. + +A fin de obtener entradas desde su base de datos, +se recomendable que tenga en cuenta las diferentes maneras que +[DataMapper][] provee a fin de realizar esta tarea: + +### Obtener una sola entrada +#### A través de la llave primaria +Usted puede recuperar una entrada desde la base de datos +utilizando un valor que la define. + +Ya sea un valor identificador de tipo Serial: + + NombreModelo.get(1) +{:lang=ruby html_use_syntax=true} + +O una cadena de caracteres: + + NombreModelo.get("foobar") +{:lang=ruby html_use_syntax=true} + +Al existir otras posibilidades para las llaves primarias, +es recomendable que se refiera a la pagina [buscadores en DataMapper][] +con el fin de obtener mas información al respecto. + +#### A través de uno o mas atributos +Usted puede obtener la primera ocurrencia de una entrada +que se encuentra en la base de datos al seguir el siguiente criterio: + + NombreModelo.first(:atributo_1 => valor_1, :atributo_2 => valor_2) +{:lang=ruby html_use_syntax=true} + +O simplemente usted puede utilizar un solo atributo: + + NombreModelo.first(:atributo => valor) +{:lang=ruby html_use_syntax=true} + +A la hora de definir las condiciones de búsqueda, +usted puede hacer uso de los condicionales existentes tales como: + + NombreModelo.first(:atributo.gt => valor) +{:lang=ruby html_use_syntax=true} + +En el caso en particular, usted obtendrá la primera ocurrencia de +``nombre_modelo`` que cumpla con la condición ``nombre_modelo.atributo > valor``. + +Usted puede encontrar la lista completa de condiciones +en la pagina [condiciones para los buscadores en DataMapper][]. + +### Obtener varias entradas +Para obtener varias entradas desde la base de datos, usted debe aplicar la +misma lógica de la seguida para obtener una sola entrada de la base de datos. +Usted debe implementar lo siguiente: + + NombreModelo.all(argumentos) +{:lang=ruby html_use_syntax=true} + +en lugar de lo siguiente: + + NombreModelo.first(argumentos) +{:lang=ruby html_use_syntax=true} + +Por ejemplo, + + NombreModelo.all(price.gt => 5) +{:lang=ruby html_use_syntax=true} + +obtendrá todas las entradas existente en la tabla ``NombreModelo`` +cuyo precios sean mayor a 5, de la misma manera que + + NombreModelo.first(price.gt => 5) +{:lang=ruby html_use_syntax=true} + +obtendrá la primera entrada de la base de datos cuyo precio es mayor a 5. + +## Actualizar +Para modificar la información existente en una entrada en la base de datos, +usted debe seguir con atención las siguientes opciones. + +### Modificar los atributos, para luego actualizar la entrada +#### Modificar los atributos +Para realizar los cambios a una instancia. + + nombre_modelo.atributo = foo +{:lang=ruby html_use_syntax=true} + +#### Actualizar la entrada +Luego, usted debe actualizarla en la base de datos. + + nombre_modelo.update +{:lang=ruby html_use_syntax=true} + +Esta acción actúa de la misma manera que la acción ``nombre_modelo_.save`` explicada previamente. +En el caso en que la actualización de la información y su respectiva validación +hayan sido exitosas, el interprete retornará el valor ``true``. +En el caso de encontrar uno o mas errores durante este proceso, +entonces el interprete retornará el valor ``false`` +y hará disponible todos los mensajes de error generadores a través de + + nombre_modelo.errors +{:lang=ruby html_use_syntax=true} + +### Modificar los atributos y actualizar la instancia en un solo paso +En el caso de tener una colección de atributos, +usted puede modificarlos y actualizarlos en un solo paso a través de + + nombre_modelo.update_attributes(coleccion) +{:lang=ruby html_use_syntax=true} + +Esta acción actúa como las acciones ``save`` y ``update`` explicadas previamente. + +### Suciedad +Usted puede verificar si una instancia esta "sucia", +o mejor dicho tiene uno o mas atributos modificados, a través de + + nombre_modelo.dirty? +{:lang=ruby html_use_syntax=true} + +El interprete retornara el valor ``true`` en el caso que la instancia haya sido modificada. +Pero si su instancia no fue modificada, el interprete retornara el valor ``false``. + +Debido a que este método es inteligente, esto es sumamente útil a la hora de verificar +si su instancia ha sido realmente modificada o no. + +En el siguiente ejemplo, se obtendrá de la base de datos +la primera ocurrencia de ``NombreModelo`` cuyo ``atributo_1`` contenga el valor 3. + + foo = NombreModelo.first(:atributo_1 => 3) + foo.atributo_1 = 3 + puts foo.dirty? # => false +{:lang=ruby html_use_syntax=true} + +Es importante remarcar que, cuando se le asigna al atributo de la instancia el mismo valor, +este método entiende que en este caso particular no haya habido modificación alguna. + +## Destruir +Esta acción es sumamente sencilla, y hay solamente una manera de realizarla. + + foo = NombreModelo.get(42) + foo.destroy +{:lang=ruby html_use_syntax=true} + +El interprete retornará el valor ``true`` en el caso de suprimir exitosamente +la entrada determinada de la base de datos. +En el caso de fallas, este retornará el valor ``false``. + +[acciones en DataMapper]: http://datamapper.org/doku.php?id=docs:crud +[buscadores en DataMapper]: http://datamapper.org/doku.php?id=docs:finders +[condiciones para los buscadores en DataMapper]: http://datamapper.org/doku.php?id=docs:finders#conditions \ No newline at end of file diff --git a/book-content/es/3-interacting-with-the-database/4-dm-relationships.markdown b/book-content/es/3-interacting-with-the-database/4-dm-relationships.markdown index d21333d8..c3c408bd 100644 --- a/book-content/es/3-interacting-with-the-database/4-dm-relationships.markdown +++ b/book-content/es/3-interacting-with-the-database/4-dm-relationships.markdown @@ -1 +1,8 @@ -#Model Relationships \ No newline at end of file +# Relaciones entre Modelos + +* Esto será una tabla de contenidos (este texto será pegado). +{:toc} + +Para más información, por favor referirse a la página [asociaciones en DataMapper][]. + +[asociaciones en DataMapper]: http://datamapper.org/doku.php?id=docs:associations \ No newline at end of file diff --git a/book-content/es/3-interacting-with-the-database/5-dm-migrations.markdown b/book-content/es/3-interacting-with-the-database/5-dm-migrations.markdown index 6bf124a9..c60a6d43 100644 --- a/book-content/es/3-interacting-with-the-database/5-dm-migrations.markdown +++ b/book-content/es/3-interacting-with-the-database/5-dm-migrations.markdown @@ -1 +1,85 @@ -#Database Migrations \ No newline at end of file +# Migraciones hacia la base de datos + +* Esto será una tabla de contenidos (este texto será pegado). +{:toc} + +## Creación y configuración de la base de datos +A fin de configurar por primera vez su base de datos, +usted debe seguir el siguiente procedimiento + + $ rake db:create + $ rake db:automigrate +{:lang=shell html_use_syntax=true} + +## Modificación de su base de datos +Después de haber creado su base de datos, +usted puede modificar su estructura +agregando columnas a alguna de sus tablas +o modificar atributos de algunas de sus columnas +al realizar los cambios necesarios en el modelo respectivo +y luego ejecutando el siguiente comando + + $ rake db:autoupgrade +{:lang=shell html_use_syntax=true} + +El comando mostrado anteriormente realizara +una actualización no destructiva de la base de datos. + +A fin de realizar una actualización destructiva, +lo cual borrara todo el contenido existente en su base de datos, +usted debe ejecutar el siguiente comando + + $ rake db:automigrate +{:lang=shell html_use_syntax=true} + +### Atención +Al realizar una actualización no destructiva de su base de datos, +por favor tenga en cuenta que esto no significa que nada malo ocurrirá. +Es una buena política realizar copias de resguardo de su base de datos +antes de proceder a realizar este tipo de actualizaciones. + +### Valores por defecto +En el caso que desee agregar una columna a su tabla, +usted puede configurar el atributo ``:default`` +en una determinado propiedad de su modelo. +Esto producirá que el valor inicial de la propiedad +para cada una de las entradas existentes +sea el valor por defecto asignado durante la especificación de la propiedad. + +En el caso que usted tenga la clase ``Persona``, +la cual tiene un atributo identificatorio y +dos entradas en su base de datos, y luego usted +desea agregar la propiedad ``nombre`` con un valor por defecto + + class Persona + property :id, Serial + property :nombre, String, :default => "Juan Perez" + end +{:lang=ruby html_use_syntax=true} + +al archivo del modelo ubicado en ``app/models/person.rb``. +Entonces ejecute el comando + + $ rake db:autoupgrade +{:lang=shell html_use_syntax=true} + +Usted podrá inspeccionar a través de la consola +que las entradas existentes en la base de datos +tienen sus nombres asignados automáticamente al valor por defecto +designado en la definición del modelo. + + $ merb -i + irb(main):001:0> Persona.all + ~ SELECT "id", "nombre" FROM "personas" ORDER BY "id" + => [#, #] +{:lang=shell html_use_syntax=true} + +### DM-Migrations +Usted puede utilizar el plug-in ``dm-migrations`` +a fin de realizar migraciones que puedan ayudarlo con tareas avanzadas. + +Para más información, por favor referirse a la página [migraciones en DataMapper][]. + +TODO explicacion del plug-in "dm-migrations". + +[migraciones en DataMapper]: http://datamapper.org/doku.php?id=docs:migrations \ No newline at end of file diff --git a/book-content/es/3-interacting-with-the-database/6-dm-validations.markdown b/book-content/es/3-interacting-with-the-database/6-dm-validations.markdown index 4e900f3c..98aa8325 100644 --- a/book-content/es/3-interacting-with-the-database/6-dm-validations.markdown +++ b/book-content/es/3-interacting-with-the-database/6-dm-validations.markdown @@ -1 +1,8 @@ -#Model Validations \ No newline at end of file +# Validaciones de los Modelos + +* Esto será una tabla de contenidos (este texto será pegado). +{:toc} + +Para más información, por favor referirse a la página [validaciones en DataMapper][]. + +[validaciones en DataMapper]: http://datamapper.org/doku.php?id=docs:validations \ No newline at end of file diff --git a/book-content/es/3-interacting-with-the-database/toc.markdown b/book-content/es/3-interacting-with-the-database/toc.markdown index 71aa5d98..3f6140bf 100644 --- a/book-content/es/3-interacting-with-the-database/toc.markdown +++ b/book-content/es/3-interacting-with-the-database/toc.markdown @@ -1,13 +1,10 @@ # interacting-with-the-database - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file