forked from mattetti/merb-book
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Translated the existing content of the chapter 3.
- Loading branch information
Showing
7 changed files
with
492 additions
and
17 deletions.
There are no files selected for viewing
76 changes: 75 additions & 1 deletion
76
book-content/es/3-interacting-with-the-database/1-dm-setting-up.markdown
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,75 @@ | ||
#Setting Up DataMapper | ||
# 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]: ... |
95 changes: 94 additions & 1 deletion
95
book-content/es/3-interacting-with-the-database/2-dm-schema.markdown
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,94 @@ | ||
#Database Schema | ||
# 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 | ||
|
215 changes: 214 additions & 1 deletion
215
book-content/es/3-interacting-with-the-database/3-dm-queries.markdown
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,214 @@ | ||
#Database Queries | ||
# 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 |
Oops, something went wrong.