Skip to content

Commit

Permalink
Translated the existing content of the chapter 3.
Browse files Browse the repository at this point in the history
  • Loading branch information
Julio Javier Cicchelli authored and mattetti committed Jan 30, 2009
1 parent 8a606cb commit da09ff0
Show file tree
Hide file tree
Showing 7 changed files with 492 additions and 17 deletions.
@@ -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]: ...
@@ -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 book-content/es/3-interacting-with-the-database/3-dm-queries.markdown
@@ -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

0 comments on commit da09ff0

Please sign in to comment.