<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff></diff>
      <filename>images/b_cover.png</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>images/cover.png</filename>
    </modified>
    <modified>
      <diff>@@ -31,7 +31,7 @@ A toda la comunidad Brazilera de Ruby on Rails que nos ayud&#243; directa o indirect
 
 Este libro fue orgullosamente traducido al espa&#241;ol por estos chicos Argentinos:
 
-**Lucas Florio** - [http://www.pedropimentel.com](http://www.pedropimentel.com)
+**Lucas Florio** - [http://blog.lucasefe.com.ar/](http://blog.lucasefe.com.ar/)
 
 Cap&#237;tulos 8-12
 
@@ -1418,7 +1418,7 @@ Now look how we can do the same in Rails 2.1:
 
 # ActionController
 
-ActionController es la capa responsable de recibir las peticiones web y tomar decisiones de qu&#233; se debe ejecutar y renderizar o redirgir la petici&#243;n a otra accti&#243;n
+ActionController es la capa responsable de recibir las peticiones web y tomar decisiones con respecto a qu&#233; se debe ejecutar y renderizar o si se debe redirigir la petici&#243;n a otra acci&#243;n
 Una acci&#243;n es definida como m&#233;todo p&#250;blico dentro de los controladores que est&#225;n autom&#225;ticamente disponibles a trav&#233;s de las rutas.
 
 
@@ -1459,23 +1459,23 @@ Ahora es posible testear una ruta con un m&#233;todo HTTP. Vea el siguiente ejempo:
 
 ### Map.resources
 
-Image que tiene un sitio escrito en espa&#241;ol, y quiere remodelar todas las rutas para que tambi&#233;n est&#233;n espa&#241;ol. En otras palabras, en vez de tener:
+Image que tiene un sitio escrito en espa&#241;ol, y quiere remodelar todas las rutas para que tambi&#233;n para que se correspondan con el idioma. En otras palabras, en vez de tener:
 
         http://www.mysite.com.br/products/1234/reviews
 
-quiesiera tener algo as&#237;:
+quisiera tener algo as&#237;:
 
-        http://www.mysite.com.br/produtos/1234/comentarios
+        http://www.mysite.com.br/productos/1234/comentarios
 
 
 
-Esto era posible, pero no en de una forma simple y sin compromete algunas de las convenciones de rails.
+Esto era posible, pero no en de una forma simple y sin comprometer algunas de las convenciones de rails.
 
-Ahora tenemos la opci&#243;n **:as** dentro de **map.resources** para personalizar nuestras rutas. Mire el ejemplo para tener  la URL de arriba en espa&#241;ol:
+Ahora tenemos la opci&#243;n **:as** dentro de **map.resources** para personalizar nuestras rutas. Mire el ejemplo para obtener la URL de arriba en espa&#241;ol:
 
-        map.resources :products, :as =&gt; 'produtos' do |product|
+        map.resources :products, :as =&gt; 'productos' do |product|
           # product_reviews_path(product) ==
-          # '/produtos/1234/comentarios
+          # '/productos/1234/comentarios
           product.resources :product_reviews, :as =&gt; 'comentarios'
         end
 &lt;!-- -*- mode: markdown; coding: utf-8; -*- --&gt;
@@ -1526,7 +1526,7 @@ Ahora luce de la siguiente forma:
 	&lt;% end %&gt;
 ## ActionView::Helpers::DateHelper
 
-Ahora, todos estos m&#233;todos de m&#243;dulo para trabajar con fechas (**date\_select**, **time\_select**, **select\_datetime**, etc.) aceptan opciones  **HTML**. Mira un ejemplo usando **date\_select**
+Ahora todos estos m&#233;todos de m&#243;dulo para trabajar con fechas (**date\_select**, **time\_select**, **select\_datetime**, etc.) aceptan opciones  **HTML**. Mira un ejemplo usando **date\_select**
 
 	&lt;%= date_select 'item','happening', :order =&gt; [:day], :class =&gt; 'foobar'%&gt;
 	
@@ -1597,7 +1597,7 @@ Por otro lado, podemos personalizar de otras formas, por ejemplo:
 		:delimiter =&gt; &quot;.&quot;, :unit =&gt; &quot;R$&quot;)
 	# =&gt; &quot;9,99 em reais&quot;
 
-Cuando creas tu cadena de formateo, se puedes especificar el siguiente par&#225;metro: 
+Cuando creas tu cadena de formateo, se puede especificar el siguiente par&#225;metro: 
 
 	%u Para la moneda
 	%n Para el n&#250;mero
@@ -1610,7 +1610,7 @@ El m&#233;todo **excerpt** nos ayuda a encontrar una palabra dentro de una frase y n
 	excerpt('This is an example', 'an', 5)
 	# =&gt; &quot;&#8230;s is an examp&#8230;&quot;
 	
-Pero hab&#237;a un problema. Si cuentas, vas a notar que el m&#233;todo retorna 6 caracteres y no 5. Esto era un bug y fue corregido. Mira el ejemplo de la salida correcta de este m&#233;todo:
+Pero hab&#237;a un problema. Si cuentas, vas a notar que el m&#233;todo retorna 6 caracteres y no 5. Esto era un bug y se corrigi&#243;. Mira el ejemplo de la salida correcta de este m&#233;todo:
 
 	excerpt('This is an example', 'an', 5)
 	# =&gt; &quot;&#8230;s is an exam&#8230;&quot;
@@ -1619,7 +1619,7 @@ Pero hab&#237;a un problema. Si cuentas, vas a notar que el m&#233;todo retorna 6 caract
 
 El m&#233;todo **simple\_format** b&#225;sicamente recibe como par&#225;metro cualquier texto y le da formato de una manera muy simple a **HTML**. Toma el texto y reemplaza los saltos de l&#237;nea (\n) por el tag **HTML** &quot;&lt; br /&gt;&quot;. Y cuando tenemos dos saltos de l&#237;nea, uno atr&#225;s del otro, separa el texto con tags &quot;&lt; p&gt;&quot;.
 
-En Rails 2.1 este m&#233;todo recibe un par&#225;metros adicional. Adem&#225;s del texto, podemos informarle que atributo **HTML** nos gustaria que el tag &quot;&lt; p&gt;&quot; incluyera. Veamos el ejemplo: 
+En Rails 2.1 este m&#233;todo recibe un par&#225;metro adicional. Adem&#225;s del texto, podemos informarle que atributo **HTML** nos gustaria que el tag &quot;&lt; p&gt;&quot; incluyera. Veamos el ejemplo: 
 
 	simple_format(&quot;Hello Mom!&quot;, :class =&gt; 'description')
 	# =&gt; &quot;&lt;p class=&#8217;description&#8217;&gt;Hello Mom!&lt;/p&gt;&quot;
@@ -1648,12 +1648,12 @@ Tambi&#233;n es posible listar cuales gemas est&#225;n siendo usadas en el proyecto ejec
 	# Listando todas las dependencias
 	rake gems
 
-Si una de las gemas tiene un archivo **rails/init.rb** y vos quer&#233;s llevar la gema con tu aplicaci&#243;n, pod&#233;s hacer: 
+Si una de las gemas tiene un archivo **rails/init.rb** y vos quer&#233;s llevar la gema con tu aplicaci&#243;n, puedes hacer: 
 
 	# Copia la gema especificada a vendor/gems/nome_do_gem-x.x.x
 	rake gems:unpack GEM=gem_name
 
-Entonces, la gema ser&#225; copiada al directorio **vendor/gems/gem\_name-x.x.x**. En caso de no especificas el nombre de la gema, Rails copiar&#225; todas las gemas al directorio **vendor/gem**
+Entonces, la gema ser&#225; copiada al directorio **vendor/gems/gem\_name-x.x.x**. En caso de no especificar el nombre de la gema, Rails copiar&#225; todas las gemas al directorio **vendor/gem**
 
 ## config.gem en plugins
 
@@ -1675,7 +1675,7 @@ Pero en Rails 2.1 el archivo **init.rb** ser&#237;a:
 	  ActionController::Base.send :include, OpenIdAuthentication
 	end
 
-As&#237; que, cuando ejecutes la tarea para instalar todas las gemas necesarias, &#233;stas estar&#225;n entre ellas.
+As&#237; que, cuando ejecute la tarea para instalar todas las gemas necesarias, &#233;stas estar&#225;n entre ellas.
 
 ## gems:build
 
@@ -1696,7 +1696,7 @@ Se agreg&#243; un acceso directo para recuperar el path del directorio **&quot;public&quot;**
 	Rails.public_path
 ## Rails.logger, Rails.root, Rails.env y Rails.cache
 
-En Rails 2.1 en vez de usar las constantes: **RAILS\_DEFAULT\_LOGGER**, **RAILS\_ROOT**, **RAILS\_ENV** and **RAILS\_CACHE**. Ahora usaremos:
+En Rails 2.1 en vez de usar las constantes: **RAILS\_DEFAULT\_LOGGER**, **RAILS\_ROOT**, **RAILS\_ENV** y **RAILS\_CACHE**, usaremos:
 
 	# RAILS_DEFAULT_LOGGER
 	Rails.logger
@@ -1716,14 +1716,14 @@ En versiones anteriores para descubrir, en tiempo de ejecuci&#243;n, cual es la vers
 
 	Rails::VERSION::STRING
 
-En Rails 2.1 cambi&#243; a:
+En Rails 2.1 usamos:
 
 	Rails.version
 
 
 ##Obteniendo informaci&#243;n acerca de un plugin
 
-Esta es una de las nuevas caracter&#237;sticas de Rails 2.1 que probablemente nunca uses. Digo &quot;probablemente&quot;, porque en algunos casos espec&#237;ficos puede ser &#250;til, por ejemplo, para saber la versi&#243;n de un plugin. 
+Esta es una de las nuevas caracter&#237;sticas de Rails 2.1 que probablemente nunca use. Digo &quot;probablemente&quot;, porque en algunos casos espec&#237;ficos puede ser &#250;til, por ejemplo, para saber la versi&#243;n de un plugin. 
 
 Para probarlo, necesitamos crear un archivo que se llame *about.yml* en el directorio del plugin, con algo como lo siguiente:
 
@@ -1738,7 +1738,7 @@ Podemos obtener esta informaci&#243;n luego de esta manera:
 	plugin.about[&quot;author&quot;] # =&gt; &#8220;Carlos Brando&#8221;
 	plugin.about[&quot;url&quot;] # =&gt; &#8220;http://www.nomedojogo.com&#8221;
 
-Si encontr&#225;s alg&#250;n buen uso de esta car&#225;cter&#237;stica y la quer&#233;s compartir conmigo, tal vez cambie mi opini&#243;n acerca de su real necesidad. 
+Si encuentras alg&#250;n buen uso de esta car&#225;cter&#237;stica y la quieres compartir conmigo, tal vez cambie mi opini&#243;n acerca de su real necesidad. 
 
 
 # Rake Tasks, Plugins y Scripts
@@ -1747,15 +1747,15 @@ Si encontr&#225;s alg&#250;n buen uso de esta car&#225;cter&#237;stica y la quer&#233;s compartir co
 
 ### rails:update
 
-De ahora en m&#225;s, cada vez que ejecutes la tarea **rake rails:freeze:edge**, esta tambi&#233;n ejecutar&#225;  **rails:update**, actualizando los archivos de configuraci&#243;n y los *JavaScripts*.
+De ahora en m&#225;s, cada vez que se ejecute la tarea **rake rails:freeze:edge**, esta tambi&#233;n ejecutar&#225;  **rails:update**, actualizando los archivos de configuraci&#243;n y los *JavaScripts*.
 
 ### Base de datos en 127.0.0.1
 
-Un cambio fue realizado en el archivo database.rake que sol&#237;a buscar unicamente en localhost bases de datos locales. Ahora considerar&#225; **127.0.0.1**. Esto funciona para las tareas **create** y **drop**. El archivo database.rake tambi&#233;n fue refactorizado para hacer el codigo menos repetitivo. 
+Un cambio fue realizado en el archivo database.rake que sol&#237;a buscar unicamente en localhost bases de datos locales. Ahora considerar&#225; **127.0.0.1**. Esto funciona para las tareas **create** y **drop**. El archivo database.rake tambi&#233;n fue refactorizado para hacer el c&#243;digo menos repetitivo. 
 
 ### Congelando a una versi&#243;n de Rails espec&#237;fica.
 
-Hasta Rails 2.1 no era posible congelar a una versi&#243;n de Rails espec&#237;fica dentro de un proyecto. Solo pod&#237;as utilizar la Revisi&#243;n como par&#225;metro. En Rails 2.1, podemos congelar a una versi&#243;n espec&#237;fica con el siguiente comando: 
+Hasta Rails 2.1 no era posible congelar a una versi&#243;n de Rails espec&#237;fica dentro de un proyecto. S&#243;lo se pod&#237;a utilizar la Revisi&#243;n como par&#225;metro. En Rails 2.1, podemos congelar a una versi&#243;n espec&#237;fica con el siguiente comando: 
 
 	rake rails:freeze:edge RELEASE=1.2.0
 
@@ -1763,11 +1763,11 @@ Hasta Rails 2.1 no era posible congelar a una versi&#243;n de Rails espec&#237;fica dent
 
 #### rake time:zones:all
 
-Devuelve todas las zonas horarias conocidas para Rails, agrupadas por uso horario. Tambi&#233;n pod&#233;s filtar los valores retornados usando el par&#225;metro &#243;ptico OFFSET, por ejemplo: OFFSET=-6.
+Devuelve todas las zonas horarias conocidas para Rails, agrupadas por uso horario. Tambi&#233;n se puede filtrar los valores retornados usando el par&#225;metro &#243;ptico OFFSET, por ejemplo: OFFSET=-6.
 
 #### rake time:zones:us
 
-Muestra lista con todas las zonas horarias de Estados Unidos. La opci&#243;n OFFSET tambi&#233;n es valida en este contexto.
+Muestra lista con todas las zonas horarias de Estados Unidos. La opci&#243;n OFFSET tambi&#233;n es v&#225;lida en este contexto.
 
 #### rake time:zones:local
 
@@ -1786,13 +1786,13 @@ Se agreg&#243; soporte para plugins alojados en repositorios GIT.
 
 Este script hace lo mismo que script/console, solo que para la base de datos. En otras palabras, te conecta con el cliente por l&#237;nea de comando de tu base de datos.
 
-Mirando al c&#243;digo, este funcionar&#237;a solamente con mysql, postgresql y sqlite(3). Cuando sea especificada otra base de datos en el archivo database.yml, el script mostrar&#225;: &quot;not supported for this database type&quot;.
+Mirando al c&#243;digo, &#233;ste funcionar&#237;a solamente con mysql, postgresql y sqlite(3). Cuando sea especificada otra base de datos en el archivo database.yml, el script mostrar&#225;: &quot;not supported for this database type&quot;.
 
 ## Plugins
 
-### Gemas ahora pueden ser plugins
+### Las Gemas ahora pueden ser plugins
 
-Ahora, cualqioer gema que tenga un archivo **rails/init.rb** puede ser instalado dentro del directorio **vendor** de tu proyecto Rails igual que un **plugin**.
+Ahora, cualquier gema que tenga un archivo **rails/init.rb** puede ser instalado dentro del directorio **vendor** de tu proyecto Rails igual que un **plugin**.
 
 ### Usando generadores en plugins
 
@@ -1800,7 +1800,7 @@ Es posible configurar **Rails** para buscar **plugins** en directorios diferente
 
 	config.plugin_paths = ['lib/plugins', 'vendor/plugins']
 
-Rails 2.0 ten&#237;a un bug en esta configuraci&#243;n que muestraba cuando un plugin ten&#237;a generadores. Por ese bug, Rails solo encuentra generadores en plugins que est&#233;n dentro de **vendor/plugins**. En Rails 2.1 ese bug fue corregido.  	
+Rails 2.0 ten&#237;a un bug en esta configuraci&#243;n que mostraba cuando un plugin ten&#237;a generadores. Por ese bug, Rails solo encuentraba generadores en plugins que estuvieran dentro de **vendor/plugins**. En Rails 2.1 ese bug fue corregido.  	
 
 # Prototype y script.aculo.us
 
@@ -1812,13 +1812,13 @@ Rails 2.1 ahora usa Prototype versi&#243;n 1.6.0.1. Este sirve como base de la versi
 
 ## Details
 
-El foco principal de los cambios de Rails fue Ruby 1.9, a&#250;n detalles menores fueon analizados para incrementar la compatibilidad de Rails con la nueva versi&#243;n de Ruby. Detalles como cambiar **File.exists?** por **File.exist?** no fueron dejados de lado.
+El foco principal de los cambios de Rails fue Ruby 1.9. Aspectos menores fueron analizados para incrementar la compatibilidad de Rails con la nueva versi&#243;n de Ruby. Detalles como cambiar **File.exists?** por **File.exist?** no fueron dejados de lado.
 
-Adem&#225;s, en Ruby 1.9, el modulo **Base64** (base64.rb) fue eliminado, por esa raz&#243;n, todas las referencias fueron remplazadas por  **ActiveSupport::Base64**.
+Adem&#225;s, en Ruby 1.9, el m&#243;dulo **Base64** (base64.rb) fue eliminado, por esa raz&#243;n, todas las referencias fueron remplazadas por  **ActiveSupport::Base64**.
 
 ##Nuevos m&#233;todos para la clase DateTime
 
-Con el objetivo de mantener compatibilidad (duck-typing) con la clase **Time**, tres nuevos m&#233;todos fueron agregado a la clase **DateTime**. Los m&#233;todos son **#utc**, **#utc?** y **#utc\_offset**. veamos un ejemplo de cada uno:
+Con el objetivo de mantener compatibilidad (duck-typing) con la clase **Time**, tres nuevos m&#233;todos fueron agregados a la clase **DateTime**. Los m&#233;todos son **#utc**, **#utc?** y **#utc\_offset**. veamos un ejemplo de cada uno:
 
 	&gt;&gt; date = DateTime.civil(2005, 2, 21, 10, 11, 12, Rational(-6, 24))
 	#=&gt; Mon, 21 Feb 2005 10:11:12 -0600
@@ -1839,7 +1839,7 @@ Con el objetivo de mantener compatibilidad (duck-typing) con la clase **Time**,
 
 ##Ruby-debug Nativo
 
-Fue habilitado nuevamente la opci&#243;n para utilizar **ruby-debug** en pruebas con Rails. Ahora, teniendo en cueta que ten&#233;s la gema instalada, solo se necesita el m&#233;todo **debugger**.
+Fue habilitada nuevamente la opci&#243;n para utilizar **ruby-debug** en pruebas con Rails. Ahora, teniendo en cuenta que la gema debe estar instalada, s&#243;lo se necesita el usar el m&#233;todo **debugger**.
 
 &lt;!-- -*- mode: markdown; coding: utf-8; -*- --&gt;
 
@@ -1847,9 +1847,9 @@ Fue habilitado nuevamente la opci&#243;n para utilizar **ruby-debug** en pruebas con
 
 &lt;!-- -*- mode: markdown; coding: utf-8; -*- --&gt;
 
-## Aregar columnas en PostgreSQL
+## Agregar columnas en PostgreSQL
 
-Hab&#237;a un bug usando  **PostgreSQL**. El bug ocurr&#237;a cuando creabamos una migraci&#243;n para agregar una columna en una tabla existente. Por ejemplo:
+Exist&#237;a un bug cuando se usaba **PostgreSQL**. El bug ocurr&#237;a cuando creabamos una migraci&#243;n para agregar una columna en una tabla existente. Por ejemplo:
 
 
 Archivo: *db/migrate/002\_add\_cost.rb*
@@ -1865,7 +1865,7 @@ Archivo: *db/migrate/002\_add\_cost.rb*
           end
         end
 
-Note que estamos creadno una columna con **:precision =&gt; 6** y  **:scale =&gt; 2**. Ahora ejecutamos **rake db:migrate** y vemos como se ve nuestra tabla en la base de datos:
+Note que estamos creando una columna con **:precision =&gt; 6** y  **:scale =&gt; 2**. Ahora ejecutamos **rake db:migrate** y vemos como se ve nuestra tabla en la base de datos:
 
 &lt;table border=&quot;1&quot; cellspacing=&quot;0&quot; cellpadding=&quot;5&quot;&gt;
         &lt;tr&gt;
@@ -1895,7 +1895,7 @@ Note que estamos creadno una columna con **:precision =&gt; 6** y  **:scale =&gt; 2**.
         &lt;/tr&gt;
 &lt;/table&gt;
 
-Vea la columna &quot;cost&quot; que acabamos de crear. Es un **numeric** com&#250;n, pero deber&#237;a ser como la columna &quot;price&quot; de arriba, m&#225;s precisamente un **numeric(6,2)**. En Rails 2.1 este error no sucede m&#225;s y la columan se crea correctamente.
+Vea la columna &quot;cost&quot; que acabamos de crear. Es un **numeric** com&#250;n, pero deber&#237;a ser como la columna &quot;price&quot; de arriba, m&#225;s precisamente un **numeric(6,2)**. En Rails 2.1 este error no sucede m&#225;s y la columa se crea correctamente.
 
 
 &lt;!-- -*- mode: markdown; coding: utf-8; -*- --&gt;
@@ -1932,7 +1932,7 @@ En Rails 2.0 el archivo *application.rb* era as&#237;:
 
 Vea la llamada al m&#233;todo  **protect\_from\_forgery**.
 
-&#191;Escuch&#243; hablar sobre Cross Site Scripting? Este es el nombre de un fallo de seguridad que se puede encontrar en la mayor&#237;a de los sitios y aplicaciones web que permiten a gente mala (estoy hablando de adolescentes que no tienen nada que hacer y tampoco tienen vida social) alterar el contenido de las p&#225;ginas web, para llevar acabo 'fishing attacks', tomando el control del navegador a trav&#233;s de c&#243;digo javascript y en la mayor&#237;a de las veces forzando el usuario a ejecutar un el comando que ellos quieran. Este &#250;ltimo tipo de ataque se llama 'cross-site request forgery'.
+&#191;Escuch&#243; hablar sobre Cross Site Scripting? Este es el nombre de un fallo de seguridad que se puede encontrar en la mayor&#237;a de los sitios y aplicaciones web que permiten a gente mala (estoy hablando de adolescentes que no tienen nada que hacer y tampoco tienen vida social) alterar el contenido de las p&#225;ginas web, para llevar acabo 'fishing attacks', tomando el control del navegador a trav&#233;s de c&#243;digo javascript y en la mayor&#237;a de las veces forzando el usuario a ejecutar el comando que ellos quieran. Este &#250;ltimo tipo de ataque se llama 'cross-site request forgery'.
 
 Cross Site Request Forgery es un tipo de ataque fuerza al usuario a ejecutar comandos si que este lo sepa. Y con el incremento del uso de ajax, las cosas empeoran.
 
@@ -1946,7 +1946,7 @@ Si ud. quiere aprender m&#225;s acerca de CSRF (Cross-Site Request Forgery) vaya a l
 
 * [http://www.nomedojogo.com/2008/01/14/como-um-garoto-chamado-samy-pode-derrubar-seu-site/isc.sans.org/diary.html?storyid=1750](http://www.nomedojogo.com/2008/01/14/como-um-garoto-chamado-samy-pode-derrubar-seu-site/isc.sans.org/diary.html?storyid=1750)
 
-Pero recuerde que esta no es una soluci&#243;n definitiva al problema, o como decimos comunmente, noes una bala de plata.
+Pero recuerde que esta no es una soluci&#243;n definitiva al problema, o como decimos comunmente, no es una bala de plata.
 
 
 
@@ -1954,7 +1954,7 @@ Pero recuerde que esta no es una soluci&#243;n definitiva al problema, o como decimo
 
 ## Use method\_missing, sin dejar cabos sueltos
 
-Debido a la naturaleza din&#225;mica de Ruby, el m&#233;todo **respond\_to?** es crucial. &#191;Cuantas veces necesitamos verificar si un m&#233;todo existe en el objeto que estamos manipulando, o si un objeto es lo que estamos esperando (**is\_a?**)?
+Debido a la naturaleza din&#225;mica de Ruby, el m&#233;todo **respond\_to?** es crucial. &#191;Cu&#225;ntas veces necesitamos verificar si un m&#233;todo existe en el objeto que estamos manipulando, o si un objeto es lo que estamos esperando (**is\_a?**)?
 
 Sin embargo hay algo muy importante que mucha gente olvida. Mire por ejemplo esta clase que usa el m&#233;todo **method\_missing**:
 
@@ -1974,7 +1974,7 @@ Sin embargo hay algo muy importante que mucha gente olvida. Mire por ejemplo est
         rex.ladrar_y_correr #=&gt; woofwoof!
 
 
-Creo que ud conoce **method\_missing**, o no? En el ejemplo de arriba estoy creando una instacia de la clase **Perro** y llamando a los m&#233;todos **ladrar**, **ladrar!** y **ladrar_y_correr** que no existen. Entonces el m&#233;todo **method\_missing** es invocado, d&#243;nde uso una simple expresi&#243;n regular para retornar &quot;woofwoof!&quot;, en caso de que el nombre del m;etodo comience con ladrar.
+Creo que ud conoce **method\_missing**, o no? En el ejemplo de arriba estoy creando una instacia de la clase **Perro** y llamando a los m&#233;todos **ladrar**, **ladrar!** y **ladrar_y_correr** que no existen. Entonces el m&#233;todo **method\_missing** es invocado, donde uso una simple expresi&#243;n regular para retornar &quot;woofwoof!&quot;, en caso  que el nombre del m&#233;todo comience con ladrar.
 
 
 Pero veamos que pasa cuando intento usar el m&#233;todo **respond\_to?**:
@@ -1983,7 +1983,7 @@ Pero veamos que pasa cuando intento usar el m&#233;todo **respond\_to?**:
         rex.ladrar #=&gt; woofwoof!
 
 
-Retorna false, y tiene mucho sentido dado que el m&#233;todo no existe realmente. Entonces es mi responsabilidad cambiar el m&#233;todo **respond\_to?** para que funcione correctamente con esta regla especial. Voy a cambiar mi clase as&#237;:
+Retorna false, y tiene mucho sentido dado que el m&#233;todo no existe realmente. Entonces es mi responsabilidad cambiar el m&#233;todo **respond\_to?** para que funcione correctamente con esta regla especial. Voy a modificar mi clase de la siguiente forma:
 
 
         class Perro
@@ -2007,12 +2007,12 @@ Retorna false, y tiene mucho sentido dado que el m&#233;todo no existe realmente. En
         rex.respond_to?(:ladrar) #=&gt; true
         rex.ladrar #=&gt; woofwoof!
 
-Ahora s&#237;! Este es un error muy com&#250;n que he visto en algunos c&#243;digos, inclusive el propio Rails. Intente ejecutar el m&#233;todo  **respond\_to?** para verificar la existencia de m&#233;todos como **find\_by\_name**, por ejemplo.
+Ahora s&#237;! Este es un error muy com&#250;n que he visto en algunos c&#243;digos, inclusive en el propio Rails. Intente ejecutar el m&#233;todo  **respond\_to?** para verificar la existencia de m&#233;todos como **find\_by\_name**, por ejemplo.
 
 
 Ruby es un lenguaje impresionante y altamente flexible, pero si no prestamos atenci&#243;n podemos dejar cabos sueltos como este.
 
-Por supuesto que en Rails 2.1 este problema se solucion&#243;, podemos usar  **respond\_to?** para verificar la existencia de m&#233;todos como **find\_by\_algo**.
+Por supuesto que en Rails 2.1 este problema ya se solucion&#243;. Podemos usar  **respond\_to?** para verificar la existencia de m&#233;todos como **find\_by\_algo**.
 
 
 
@@ -2020,7 +2020,7 @@ Por supuesto que en Rails 2.1 este problema se solucion&#243;, podemos usar  **respo
 
 ## PostgreSQL
 
-En Rails 2.0, el adaptador para **PostgreSQL** ten&#237;a soporte solamente para las versiones 8.1 hasta 8.3. Se agreg&#243; soporte para las versiones 7.4 hasta la 8.3
+En Rails 2.0, el adaptador para **PostgreSQL** ten&#237;a soporte solamente para las versiones 8.1 hasta 8.3. Se agreg&#243; soporte para las versiones 7.4 hasta la 8.3.
 
 
 </diff>
      <filename>output/full_book.texttile</filename>
    </modified>
    <modified>
      <diff>@@ -81,7 +81,7 @@
 
 &lt;p&gt;Este libro fue orgullosamente traducido al espa&#241;ol por estos chicos Argentinos:&lt;/p&gt;
 
-&lt;p&gt;&lt;strong&gt;Lucas Florio&lt;/strong&gt; - &lt;a href=&quot;http://www.pedropimentel.com&quot;&gt;http://www.pedropimentel.com&lt;/a&gt;&lt;/p&gt;
+&lt;p&gt;&lt;strong&gt;Lucas Florio&lt;/strong&gt; - &lt;a href=&quot;http://blog.lucasefe.com.ar/&quot;&gt;http://blog.lucasefe.com.ar/&lt;/a&gt;&lt;/p&gt;
 
 &lt;p&gt;Cap&#237;tulos 8-12&lt;/p&gt;
 
@@ -1586,7 +1586,7 @@ Veamos un ejemplo:&lt;/p&gt;
 
 &lt;h1&gt; ActionController&lt;/h1&gt;
 
-&lt;p&gt;ActionController es la capa responsable de recibir las peticiones web y tomar decisiones de qu&#233; se debe ejecutar y renderizar o redirgir la petici&#243;n a otra accti&#243;n
+&lt;p&gt;ActionController es la capa responsable de recibir las peticiones web y tomar decisiones con respecto a qu&#233; se debe ejecutar y renderizar o si se debe redirigir la petici&#243;n a otra acci&#243;n
 Una acci&#243;n es definida como m&#233;todo p&#250;blico dentro de los controladores que est&#225;n autom&#225;ticamente disponibles a trav&#233;s de las rutas.&lt;/p&gt;
 
 &lt;!-- -*- mode: markdown; coding: utf-8; -*- --&gt;
@@ -1629,23 +1629,23 @@ Una acci&#243;n es definida como m&#233;todo p&#250;blico dentro de los controladores que es
 
 &lt;h3&gt; Map.resources&lt;/h3&gt;
 
-&lt;p&gt;Image que tiene un sitio escrito en espa&#241;ol, y quiere remodelar todas las rutas para que tambi&#233;n est&#233;n espa&#241;ol. En otras palabras, en vez de tener:&lt;/p&gt;
+&lt;p&gt;Image que tiene un sitio escrito en espa&#241;ol, y quiere remodelar todas las rutas para que tambi&#233;n para que se correspondan con el idioma. En otras palabras, en vez de tener:&lt;/p&gt;
 
 &lt;pre class=&quot;mac_classic&quot;&gt;    http&lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedConstant&quot;&gt;:&lt;/span&gt;/&lt;/span&gt;&lt;span class=&quot;Keyword&quot;&gt;/&lt;/span&gt;www.&lt;span class=&quot;FunctionName&quot;&gt;mysite&lt;/span&gt;.&lt;span class=&quot;FunctionName&quot;&gt;com&lt;/span&gt;.&lt;span class=&quot;FunctionName&quot;&gt;br&lt;/span&gt;&lt;span class=&quot;Keyword&quot;&gt;/&lt;/span&gt;products&lt;span class=&quot;Keyword&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;Number&quot;&gt;1234&lt;/span&gt;&lt;span class=&quot;Keyword&quot;&gt;/&lt;/span&gt;reviews
 &lt;/pre&gt;
 
-&lt;p&gt;quiesiera tener algo as&#237;:&lt;/p&gt;
+&lt;p&gt;quisiera tener algo as&#237;:&lt;/p&gt;
 
-&lt;pre class=&quot;mac_classic&quot;&gt;    http&lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedConstant&quot;&gt;:&lt;/span&gt;/&lt;/span&gt;&lt;span class=&quot;Keyword&quot;&gt;/&lt;/span&gt;www.&lt;span class=&quot;FunctionName&quot;&gt;mysite&lt;/span&gt;.&lt;span class=&quot;FunctionName&quot;&gt;com&lt;/span&gt;.&lt;span class=&quot;FunctionName&quot;&gt;br&lt;/span&gt;&lt;span class=&quot;Keyword&quot;&gt;/&lt;/span&gt;produtos&lt;span class=&quot;Keyword&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;Number&quot;&gt;1234&lt;/span&gt;&lt;span class=&quot;Keyword&quot;&gt;/&lt;/span&gt;comentarios
+&lt;pre class=&quot;mac_classic&quot;&gt;    http&lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedConstant&quot;&gt;:&lt;/span&gt;/&lt;/span&gt;&lt;span class=&quot;Keyword&quot;&gt;/&lt;/span&gt;www.&lt;span class=&quot;FunctionName&quot;&gt;mysite&lt;/span&gt;.&lt;span class=&quot;FunctionName&quot;&gt;com&lt;/span&gt;.&lt;span class=&quot;FunctionName&quot;&gt;br&lt;/span&gt;&lt;span class=&quot;Keyword&quot;&gt;/&lt;/span&gt;productos&lt;span class=&quot;Keyword&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;Number&quot;&gt;1234&lt;/span&gt;&lt;span class=&quot;Keyword&quot;&gt;/&lt;/span&gt;comentarios
 &lt;/pre&gt;
 
-&lt;p&gt;Esto era posible, pero no en de una forma simple y sin compromete algunas de las convenciones de rails.&lt;/p&gt;
+&lt;p&gt;Esto era posible, pero no en de una forma simple y sin comprometer algunas de las convenciones de rails.&lt;/p&gt;
 
-&lt;p&gt;Ahora tenemos la opci&#243;n &lt;strong&gt;:as&lt;/strong&gt; dentro de &lt;strong&gt;map.resources&lt;/strong&gt; para personalizar nuestras rutas. Mire el ejemplo para tener  la URL de arriba en espa&#241;ol:&lt;/p&gt;
+&lt;p&gt;Ahora tenemos la opci&#243;n &lt;strong&gt;:as&lt;/strong&gt; dentro de &lt;strong&gt;map.resources&lt;/strong&gt; para personalizar nuestras rutas. Mire el ejemplo para obtener la URL de arriba en espa&#241;ol:&lt;/p&gt;
 
-&lt;pre class=&quot;mac_classic&quot;&gt;    map.&lt;span class=&quot;FunctionName&quot;&gt;resources&lt;/span&gt; &lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedConstant&quot;&gt;:&lt;/span&gt;products&lt;/span&gt;, &lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedConstant&quot;&gt;:&lt;/span&gt;as&lt;/span&gt; =&amp;gt; &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;produtos&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;Keyword&quot;&gt;do &lt;/span&gt;|&lt;span class=&quot;Variable&quot;&gt;product&lt;/span&gt;|
+&lt;pre class=&quot;mac_classic&quot;&gt;    map.&lt;span class=&quot;FunctionName&quot;&gt;resources&lt;/span&gt; &lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedConstant&quot;&gt;:&lt;/span&gt;products&lt;/span&gt;, &lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedConstant&quot;&gt;:&lt;/span&gt;as&lt;/span&gt; =&amp;gt; &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;productos&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;Keyword&quot;&gt;do &lt;/span&gt;|&lt;span class=&quot;Variable&quot;&gt;product&lt;/span&gt;|
 &lt;span class=&quot;Comment&quot;&gt;      &lt;span class=&quot;Comment&quot;&gt;#&lt;/span&gt; product_reviews_path(product) ==&lt;/span&gt;
-&lt;span class=&quot;Comment&quot;&gt;      &lt;span class=&quot;Comment&quot;&gt;#&lt;/span&gt; '/produtos/1234/comentarios&lt;/span&gt;
+&lt;span class=&quot;Comment&quot;&gt;      &lt;span class=&quot;Comment&quot;&gt;#&lt;/span&gt; '/productos/1234/comentarios&lt;/span&gt;
       product.&lt;span class=&quot;FunctionName&quot;&gt;resources&lt;/span&gt; &lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedConstant&quot;&gt;:&lt;/span&gt;product_reviews&lt;/span&gt;, &lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedConstant&quot;&gt;:&lt;/span&gt;as&lt;/span&gt; =&amp;gt; &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;comentarios&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
     &lt;span class=&quot;Keyword&quot;&gt;end&lt;/span&gt;
 &lt;/pre&gt;
@@ -1704,7 +1704,7 @@ Una acci&#243;n es definida como m&#233;todo p&#250;blico dentro de los controladores que es
 
 &lt;h2&gt; ActionView::Helpers::DateHelper&lt;/h2&gt;
 
-&lt;p&gt;Ahora, todos estos m&#233;todos de m&#243;dulo para trabajar con fechas (&lt;strong&gt;date_select&lt;/strong&gt;, &lt;strong&gt;time_select&lt;/strong&gt;, &lt;strong&gt;select_datetime&lt;/strong&gt;, etc.) aceptan opciones  &lt;strong&gt;HTML&lt;/strong&gt;. Mira un ejemplo usando &lt;strong&gt;date_select&lt;/strong&gt;&lt;/p&gt;
+&lt;p&gt;Ahora todos estos m&#233;todos de m&#243;dulo para trabajar con fechas (&lt;strong&gt;date_select&lt;/strong&gt;, &lt;strong&gt;time_select&lt;/strong&gt;, &lt;strong&gt;select_datetime&lt;/strong&gt;, etc.) aceptan opciones  &lt;strong&gt;HTML&lt;/strong&gt;. Mira un ejemplo usando &lt;strong&gt;date_select&lt;/strong&gt;&lt;/p&gt;
 
 &lt;pre class=&quot;mac_classic&quot;&gt;&lt;span class=&quot;Keyword&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;Keyword&quot;&gt;%=&lt;/span&gt; date_select &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;item&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;happening&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedConstant&quot;&gt;:&lt;/span&gt;order&lt;/span&gt; =&amp;gt; [&lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedConstant&quot;&gt;:&lt;/span&gt;day&lt;/span&gt;], &lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedConstant&quot;&gt;:&lt;/span&gt;class&lt;/span&gt; =&amp;gt; &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;foobar&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;/span&gt;
 &lt;/pre&gt;
@@ -1784,7 +1784,7 @@ stylesheet_link_tag &lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedCo
 &lt;span class=&quot;Comment&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;#&lt;/span&gt; =&amp;gt; &amp;quot;9,99 em reais&amp;quot;&lt;/span&gt;
 &lt;/pre&gt;
 
-&lt;p&gt;Cuando creas tu cadena de formateo, se puedes especificar el siguiente par&#225;metro: &lt;/p&gt;
+&lt;p&gt;Cuando creas tu cadena de formateo, se puede especificar el siguiente par&#225;metro: &lt;/p&gt;
 
 &lt;pre class=&quot;mac_classic&quot;&gt;&lt;span class=&quot;Keyword&quot;&gt;%&lt;/span&gt;u &lt;span class=&quot;Variable&quot;&gt;Para&lt;/span&gt; la moneda
 &lt;span class=&quot;Keyword&quot;&gt;%&lt;/span&gt;n &lt;span class=&quot;Variable&quot;&gt;Para&lt;/span&gt; el n&#250;mero
@@ -1800,7 +1800,7 @@ stylesheet_link_tag &lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedCo
 &lt;span class=&quot;Comment&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;#&lt;/span&gt; =&amp;gt; &amp;quot;&#8230;s is an examp&#8230;&amp;quot;&lt;/span&gt;
 &lt;/pre&gt;
 
-&lt;p&gt;Pero hab&#237;a un problema. Si cuentas, vas a notar que el m&#233;todo retorna 6 caracteres y no 5. Esto era un bug y fue corregido. Mira el ejemplo de la salida correcta de este m&#233;todo:&lt;/p&gt;
+&lt;p&gt;Pero hab&#237;a un problema. Si cuentas, vas a notar que el m&#233;todo retorna 6 caracteres y no 5. Esto era un bug y se corrigi&#243;. Mira el ejemplo de la salida correcta de este m&#233;todo:&lt;/p&gt;
 
 &lt;pre class=&quot;mac_classic&quot;&gt;&lt;span class=&quot;FunctionName&quot;&gt;excerpt&lt;/span&gt;(&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;This is an example&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;an&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;Number&quot;&gt;5&lt;/span&gt;)
 &lt;span class=&quot;Comment&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;#&lt;/span&gt; =&amp;gt; &amp;quot;&#8230;s is an exam&#8230;&amp;quot;&lt;/span&gt;
@@ -1810,7 +1810,7 @@ stylesheet_link_tag &lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedCo
 
 &lt;p&gt;El m&#233;todo &lt;strong&gt;simple_format&lt;/strong&gt; b&#225;sicamente recibe como par&#225;metro cualquier texto y le da formato de una manera muy simple a &lt;strong&gt;HTML&lt;/strong&gt;. Toma el texto y reemplaza los saltos de l&#237;nea (\n) por el tag &lt;strong&gt;HTML&lt;/strong&gt; &quot;&amp;lt; br /&gt;&quot;. Y cuando tenemos dos saltos de l&#237;nea, uno atr&#225;s del otro, separa el texto con tags &quot;&amp;lt; p&gt;&quot;.&lt;/p&gt;
 
-&lt;p&gt;En Rails 2.1 este m&#233;todo recibe un par&#225;metros adicional. Adem&#225;s del texto, podemos informarle que atributo &lt;strong&gt;HTML&lt;/strong&gt; nos gustaria que el tag &quot;&amp;lt; p&gt;&quot; incluyera. Veamos el ejemplo: &lt;/p&gt;
+&lt;p&gt;En Rails 2.1 este m&#233;todo recibe un par&#225;metro adicional. Adem&#225;s del texto, podemos informarle que atributo &lt;strong&gt;HTML&lt;/strong&gt; nos gustaria que el tag &quot;&amp;lt; p&gt;&quot; incluyera. Veamos el ejemplo: &lt;/p&gt;
 
 &lt;pre class=&quot;mac_classic&quot;&gt;&lt;span class=&quot;FunctionName&quot;&gt;simple_format&lt;/span&gt;(&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;Hello Mom!&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedConstant&quot;&gt;:&lt;/span&gt;class&lt;/span&gt; =&amp;gt; &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;description&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt;)
 &lt;span class=&quot;Comment&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;#&lt;/span&gt; =&amp;gt; &amp;quot;&amp;lt;p class=&#8217;description&#8217;&amp;gt;Hello Mom!&amp;lt;/p&amp;gt;&amp;quot;&lt;/span&gt;
@@ -1844,13 +1844,13 @@ rake gems&lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedConstant&quot;&gt;:&lt;/
 rake gems
 &lt;/pre&gt;
 
-&lt;p&gt;Si una de las gemas tiene un archivo &lt;strong&gt;rails/init.rb&lt;/strong&gt; y vos quer&#233;s llevar la gema con tu aplicaci&#243;n, pod&#233;s hacer: &lt;/p&gt;
+&lt;p&gt;Si una de las gemas tiene un archivo &lt;strong&gt;rails/init.rb&lt;/strong&gt; y vos quer&#233;s llevar la gema con tu aplicaci&#243;n, puedes hacer: &lt;/p&gt;
 
 &lt;pre class=&quot;mac_classic&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;#&lt;/span&gt; Copia la gema especificada a vendor/gems/nome_do_gem-x.x.x&lt;/span&gt;
 rake gems&lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedConstant&quot;&gt;:&lt;/span&gt;unpack&lt;/span&gt; &lt;span class=&quot;Variable&quot;&gt;GEM&lt;/span&gt;&lt;span class=&quot;Keyword&quot;&gt;=&lt;/span&gt;gem_name
 &lt;/pre&gt;
 
-&lt;p&gt;Entonces, la gema ser&#225; copiada al directorio &lt;strong&gt;vendor/gems/gem_name-x.x.x&lt;/strong&gt;. En caso de no especificas el nombre de la gema, Rails copiar&#225; todas las gemas al directorio &lt;strong&gt;vendor/gem&lt;/strong&gt;&lt;/p&gt;
+&lt;p&gt;Entonces, la gema ser&#225; copiada al directorio &lt;strong&gt;vendor/gems/gem_name-x.x.x&lt;/strong&gt;. En caso de no especificar el nombre de la gema, Rails copiar&#225; todas las gemas al directorio &lt;strong&gt;vendor/gem&lt;/strong&gt;&lt;/p&gt;
 
 &lt;h2&gt; config.gem en plugins&lt;/h2&gt;
 
@@ -1874,7 +1874,7 @@ config.&lt;span class=&quot;FunctionName&quot;&gt;after_initialize&lt;/span&gt; &lt;span class=&quot;Keyword&quot;&gt;
 &lt;span class=&quot;Keyword&quot;&gt;end&lt;/span&gt;
 &lt;/pre&gt;
 
-&lt;p&gt;As&#237; que, cuando ejecutes la tarea para instalar todas las gemas necesarias, &#233;stas estar&#225;n entre ellas.&lt;/p&gt;
+&lt;p&gt;As&#237; que, cuando ejecute la tarea para instalar todas las gemas necesarias, &#233;stas estar&#225;n entre ellas.&lt;/p&gt;
 
 &lt;h2&gt; gems:build&lt;/h2&gt;
 
@@ -1900,7 +1900,7 @@ rake gems&lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedConstant&quot;&gt;:&lt;/
 
 &lt;h2&gt; Rails.logger, Rails.root, Rails.env y Rails.cache&lt;/h2&gt;
 
-&lt;p&gt;En Rails 2.1 en vez de usar las constantes: &lt;strong&gt;RAILS_DEFAULT_LOGGER&lt;/strong&gt;, &lt;strong&gt;RAILS_ROOT&lt;/strong&gt;, &lt;strong&gt;RAILS_ENV&lt;/strong&gt; and &lt;strong&gt;RAILS_CACHE&lt;/strong&gt;. Ahora usaremos:&lt;/p&gt;
+&lt;p&gt;En Rails 2.1 en vez de usar las constantes: &lt;strong&gt;RAILS_DEFAULT_LOGGER&lt;/strong&gt;, &lt;strong&gt;RAILS_ROOT&lt;/strong&gt;, &lt;strong&gt;RAILS_ENV&lt;/strong&gt; y &lt;strong&gt;RAILS_CACHE&lt;/strong&gt;, usaremos:&lt;/p&gt;
 
 &lt;pre class=&quot;mac_classic&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;#&lt;/span&gt; RAILS_DEFAULT_LOGGER&lt;/span&gt;
 &lt;span class=&quot;LibraryObject&quot;&gt;Rails&lt;/span&gt;.&lt;span class=&quot;FunctionName&quot;&gt;logger&lt;/span&gt;
@@ -1922,14 +1922,14 @@ rake gems&lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedConstant&quot;&gt;:&lt;/
 &lt;pre class=&quot;mac_classic&quot;&gt;&lt;span class=&quot;LibraryObject&quot;&gt;Rails&lt;/span&gt;::&lt;span class=&quot;FunctionName&quot;&gt;VERSION&lt;/span&gt;::&lt;span class=&quot;FunctionName&quot;&gt;STRING&lt;/span&gt;
 &lt;/pre&gt;
 
-&lt;p&gt;En Rails 2.1 cambi&#243; a:&lt;/p&gt;
+&lt;p&gt;En Rails 2.1 usamos:&lt;/p&gt;
 
 &lt;pre class=&quot;mac_classic&quot;&gt;&lt;span class=&quot;LibraryObject&quot;&gt;Rails&lt;/span&gt;.&lt;span class=&quot;FunctionName&quot;&gt;version&lt;/span&gt;
 &lt;/pre&gt;
 
 &lt;h2&gt;Obteniendo informaci&#243;n acerca de un plugin&lt;/h2&gt;
 
-&lt;p&gt;Esta es una de las nuevas caracter&#237;sticas de Rails 2.1 que probablemente nunca uses. Digo &quot;probablemente&quot;, porque en algunos casos espec&#237;ficos puede ser &#250;til, por ejemplo, para saber la versi&#243;n de un plugin. &lt;/p&gt;
+&lt;p&gt;Esta es una de las nuevas caracter&#237;sticas de Rails 2.1 que probablemente nunca use. Digo &quot;probablemente&quot;, porque en algunos casos espec&#237;ficos puede ser &#250;til, por ejemplo, para saber la versi&#243;n de un plugin. &lt;/p&gt;
 
 &lt;p&gt;Para probarlo, necesitamos crear un archivo que se llame &lt;em&gt;about.yml&lt;/em&gt; en el directorio del plugin, con algo como lo siguiente:&lt;/p&gt;
 
@@ -1946,7 +1946,7 @@ plugin.&lt;span class=&quot;FunctionName&quot;&gt;about&lt;/span&gt;[&lt;span class=&quot;String&quot;&gt;&lt;span class=
 plugin.&lt;span class=&quot;FunctionName&quot;&gt;about&lt;/span&gt;[&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;url&lt;span class=&quot;String&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;] &lt;span class=&quot;Comment&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;#&lt;/span&gt; =&amp;gt; &#8220;http://www.nomedojogo.com&#8221;&lt;/span&gt;
 &lt;/pre&gt;
 
-&lt;p&gt;Si encontr&#225;s alg&#250;n buen uso de esta car&#225;cter&#237;stica y la quer&#233;s compartir conmigo, tal vez cambie mi opini&#243;n acerca de su real necesidad. &lt;/p&gt;
+&lt;p&gt;Si encuentras alg&#250;n buen uso de esta car&#225;cter&#237;stica y la quieres compartir conmigo, tal vez cambie mi opini&#243;n acerca de su real necesidad. &lt;/p&gt;
 
 &lt;h1&gt; Rake Tasks, Plugins y Scripts&lt;/h1&gt;
 
@@ -1954,15 +1954,15 @@ plugin.&lt;span class=&quot;FunctionName&quot;&gt;about&lt;/span&gt;[&lt;span class=&quot;String&quot;&gt;&lt;span class=
 
 &lt;h3&gt; rails:update&lt;/h3&gt;
 
-&lt;p&gt;De ahora en m&#225;s, cada vez que ejecutes la tarea &lt;strong&gt;rake rails:freeze:edge&lt;/strong&gt;, esta tambi&#233;n ejecutar&#225;  &lt;strong&gt;rails:update&lt;/strong&gt;, actualizando los archivos de configuraci&#243;n y los &lt;em&gt;JavaScripts&lt;/em&gt;.&lt;/p&gt;
+&lt;p&gt;De ahora en m&#225;s, cada vez que se ejecute la tarea &lt;strong&gt;rake rails:freeze:edge&lt;/strong&gt;, esta tambi&#233;n ejecutar&#225;  &lt;strong&gt;rails:update&lt;/strong&gt;, actualizando los archivos de configuraci&#243;n y los &lt;em&gt;JavaScripts&lt;/em&gt;.&lt;/p&gt;
 
 &lt;h3&gt; Base de datos en 127.0.0.1&lt;/h3&gt;
 
-&lt;p&gt;Un cambio fue realizado en el archivo database.rake que sol&#237;a buscar unicamente en localhost bases de datos locales. Ahora considerar&#225; &lt;strong&gt;127.0.0.1&lt;/strong&gt;. Esto funciona para las tareas &lt;strong&gt;create&lt;/strong&gt; y &lt;strong&gt;drop&lt;/strong&gt;. El archivo database.rake tambi&#233;n fue refactorizado para hacer el codigo menos repetitivo. &lt;/p&gt;
+&lt;p&gt;Un cambio fue realizado en el archivo database.rake que sol&#237;a buscar unicamente en localhost bases de datos locales. Ahora considerar&#225; &lt;strong&gt;127.0.0.1&lt;/strong&gt;. Esto funciona para las tareas &lt;strong&gt;create&lt;/strong&gt; y &lt;strong&gt;drop&lt;/strong&gt;. El archivo database.rake tambi&#233;n fue refactorizado para hacer el c&#243;digo menos repetitivo. &lt;/p&gt;
 
 &lt;h3&gt; Congelando a una versi&#243;n de Rails espec&#237;fica.&lt;/h3&gt;
 
-&lt;p&gt;Hasta Rails 2.1 no era posible congelar a una versi&#243;n de Rails espec&#237;fica dentro de un proyecto. Solo pod&#237;as utilizar la Revisi&#243;n como par&#225;metro. En Rails 2.1, podemos congelar a una versi&#243;n espec&#237;fica con el siguiente comando: &lt;/p&gt;
+&lt;p&gt;Hasta Rails 2.1 no era posible congelar a una versi&#243;n de Rails espec&#237;fica dentro de un proyecto. S&#243;lo se pod&#237;a utilizar la Revisi&#243;n como par&#225;metro. En Rails 2.1, podemos congelar a una versi&#243;n espec&#237;fica con el siguiente comando: &lt;/p&gt;
 
 &lt;pre class=&quot;mac_classic&quot;&gt;rake rails&lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedConstant&quot;&gt;:&lt;/span&gt;freeze&lt;/span&gt;&lt;span class=&quot;UserDefinedConstant&quot;&gt;&lt;span class=&quot;UserDefinedConstant&quot;&gt;:&lt;/span&gt;edge&lt;/span&gt; &lt;span class=&quot;Variable&quot;&gt;RELEASE&lt;/span&gt;&lt;span class=&quot;Keyword&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;Number&quot;&gt;1.2&lt;/span&gt;.&lt;span class=&quot;Number&quot;&gt;0&lt;/span&gt;
 &lt;/pre&gt;
@@ -1971,11 +1971,11 @@ plugin.&lt;span class=&quot;FunctionName&quot;&gt;about&lt;/span&gt;[&lt;span class=&quot;String&quot;&gt;&lt;span class=
 
 &lt;h4&gt; rake time:zones:all&lt;/h4&gt;
 
-&lt;p&gt;Devuelve todas las zonas horarias conocidas para Rails, agrupadas por uso horario. Tambi&#233;n pod&#233;s filtar los valores retornados usando el par&#225;metro &#243;ptico OFFSET, por ejemplo: OFFSET=-6.&lt;/p&gt;
+&lt;p&gt;Devuelve todas las zonas horarias conocidas para Rails, agrupadas por uso horario. Tambi&#233;n se puede filtrar los valores retornados usando el par&#225;metro &#243;ptico OFFSET, por ejemplo: OFFSET=-6.&lt;/p&gt;
 
 &lt;h4&gt; rake time:zones:us&lt;/h4&gt;
 
-&lt;p&gt;Muestra lista con todas las zonas horarias de Estados Unidos. La opci&#243;n OFFSET tambi&#233;n es valida en este contexto.&lt;/p&gt;
+&lt;p&gt;Muestra lista con todas las zonas horarias de Estados Unidos. La opci&#243;n OFFSET tambi&#233;n es v&#225;lida en este contexto.&lt;/p&gt;
 
 &lt;h4&gt; rake time:zones:local&lt;/h4&gt;
 
@@ -1992,13 +1992,13 @@ Se agreg&#243; soporte para plugins alojados en repositorios GIT.&lt;/p&gt;
 
 &lt;p&gt;Este script hace lo mismo que script/console, solo que para la base de datos. En otras palabras, te conecta con el cliente por l&#237;nea de comando de tu base de datos.&lt;/p&gt;
 
-&lt;p&gt;Mirando al c&#243;digo, este funcionar&#237;a solamente con mysql, postgresql y sqlite(3). Cuando sea especificada otra base de datos en el archivo database.yml, el script mostrar&#225;: &quot;not supported for this database type&quot;.&lt;/p&gt;
+&lt;p&gt;Mirando al c&#243;digo, &#233;ste funcionar&#237;a solamente con mysql, postgresql y sqlite(3). Cuando sea especificada otra base de datos en el archivo database.yml, el script mostrar&#225;: &quot;not supported for this database type&quot;.&lt;/p&gt;
 
 &lt;h2&gt; Plugins&lt;/h2&gt;
 
-&lt;h3&gt; Gemas ahora pueden ser plugins&lt;/h3&gt;
+&lt;h3&gt; Las Gemas ahora pueden ser plugins&lt;/h3&gt;
 
-&lt;p&gt;Ahora, cualqioer gema que tenga un archivo &lt;strong&gt;rails/init.rb&lt;/strong&gt; puede ser instalado dentro del directorio &lt;strong&gt;vendor&lt;/strong&gt; de tu proyecto Rails igual que un &lt;strong&gt;plugin&lt;/strong&gt;.&lt;/p&gt;
+&lt;p&gt;Ahora, cualquier gema que tenga un archivo &lt;strong&gt;rails/init.rb&lt;/strong&gt; puede ser instalado dentro del directorio &lt;strong&gt;vendor&lt;/strong&gt; de tu proyecto Rails igual que un &lt;strong&gt;plugin&lt;/strong&gt;.&lt;/p&gt;
 
 &lt;h3&gt; Usando generadores en plugins&lt;/h3&gt;
 
@@ -2007,7 +2007,7 @@ Se agreg&#243; soporte para plugins alojados en repositorios GIT.&lt;/p&gt;
 &lt;pre class=&quot;mac_classic&quot;&gt;config.&lt;span class=&quot;FunctionName&quot;&gt;plugin_paths&lt;/span&gt; &lt;span class=&quot;Keyword&quot;&gt;=&lt;/span&gt; [&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;lib/plugins&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;vendor/plugins&lt;span class=&quot;String&quot;&gt;'&lt;/span&gt;&lt;/span&gt;]
 &lt;/pre&gt;
 
-&lt;p&gt;Rails 2.0 ten&#237;a un bug en esta configuraci&#243;n que muestraba cuando un plugin ten&#237;a generadores. Por ese bug, Rails solo encuentra generadores en plugins que est&#233;n dentro de &lt;strong&gt;vendor/plugins&lt;/strong&gt;. En Rails 2.1 ese bug fue corregido.   &lt;br/&gt;
+&lt;p&gt;Rails 2.0 ten&#237;a un bug en esta configuraci&#243;n que mostraba cuando un plugin ten&#237;a generadores. Por ese bug, Rails solo encuentraba generadores en plugins que estuvieran dentro de &lt;strong&gt;vendor/plugins&lt;/strong&gt;. En Rails 2.1 ese bug fue corregido.  &lt;br/&gt;
 &lt;/p&gt;
 
 &lt;h1&gt; Prototype y script.aculo.us&lt;/h1&gt;
@@ -2020,13 +2020,13 @@ Se agreg&#243; soporte para plugins alojados en repositorios GIT.&lt;/p&gt;
 
 &lt;h2&gt; Details&lt;/h2&gt;
 
-&lt;p&gt;El foco principal de los cambios de Rails fue Ruby 1.9, a&#250;n detalles menores fueon analizados para incrementar la compatibilidad de Rails con la nueva versi&#243;n de Ruby. Detalles como cambiar &lt;strong&gt;File.exists?&lt;/strong&gt; por &lt;strong&gt;File.exist?&lt;/strong&gt; no fueron dejados de lado.&lt;/p&gt;
+&lt;p&gt;El foco principal de los cambios de Rails fue Ruby 1.9. Aspectos menores fueron analizados para incrementar la compatibilidad de Rails con la nueva versi&#243;n de Ruby. Detalles como cambiar &lt;strong&gt;File.exists?&lt;/strong&gt; por &lt;strong&gt;File.exist?&lt;/strong&gt; no fueron dejados de lado.&lt;/p&gt;
 
-&lt;p&gt;Adem&#225;s, en Ruby 1.9, el modulo &lt;strong&gt;Base64&lt;/strong&gt; (base64.rb) fue eliminado, por esa raz&#243;n, todas las referencias fueron remplazadas por  &lt;strong&gt;ActiveSupport::Base64&lt;/strong&gt;.&lt;/p&gt;
+&lt;p&gt;Adem&#225;s, en Ruby 1.9, el m&#243;dulo &lt;strong&gt;Base64&lt;/strong&gt; (base64.rb) fue eliminado, por esa raz&#243;n, todas las referencias fueron remplazadas por  &lt;strong&gt;ActiveSupport::Base64&lt;/strong&gt;.&lt;/p&gt;
 
 &lt;h2&gt;Nuevos m&#233;todos para la clase DateTime&lt;/h2&gt;
 
-&lt;p&gt;Con el objetivo de mantener compatibilidad (duck-typing) con la clase &lt;strong&gt;Time&lt;/strong&gt;, tres nuevos m&#233;todos fueron agregado a la clase &lt;strong&gt;DateTime&lt;/strong&gt;. Los m&#233;todos son &lt;strong&gt;#utc&lt;/strong&gt;, &lt;strong&gt;#utc?&lt;/strong&gt; y &lt;strong&gt;#utc_offset&lt;/strong&gt;. veamos un ejemplo de cada uno:&lt;/p&gt;
+&lt;p&gt;Con el objetivo de mantener compatibilidad (duck-typing) con la clase &lt;strong&gt;Time&lt;/strong&gt;, tres nuevos m&#233;todos fueron agregados a la clase &lt;strong&gt;DateTime&lt;/strong&gt;. Los m&#233;todos son &lt;strong&gt;#utc&lt;/strong&gt;, &lt;strong&gt;#utc?&lt;/strong&gt; y &lt;strong&gt;#utc_offset&lt;/strong&gt;. veamos un ejemplo de cada uno:&lt;/p&gt;
 
 &lt;pre class=&quot;mac_classic&quot;&gt;&lt;span class=&quot;Keyword&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; date &lt;span class=&quot;Keyword&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;LibraryObject&quot;&gt;DateTime&lt;/span&gt;.&lt;span class=&quot;FunctionName&quot;&gt;civil&lt;/span&gt;(&lt;span class=&quot;Number&quot;&gt;2005&lt;/span&gt;, &lt;span class=&quot;Number&quot;&gt;2&lt;/span&gt;, &lt;span class=&quot;Number&quot;&gt;21&lt;/span&gt;, &lt;span class=&quot;Number&quot;&gt;10&lt;/span&gt;, &lt;span class=&quot;Number&quot;&gt;11&lt;/span&gt;, &lt;span class=&quot;Number&quot;&gt;12&lt;/span&gt;, &lt;span class=&quot;Variable&quot;&gt;Rational&lt;/span&gt;(&lt;span class=&quot;Keyword&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Number&quot;&gt;6&lt;/span&gt;, &lt;span class=&quot;Number&quot;&gt;24&lt;/span&gt;))
 &lt;span class=&quot;Comment&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;#&lt;/span&gt;=&amp;gt; Mon, 21 Feb 2005 10:11:12 -0600&lt;/span&gt;
@@ -2048,7 +2048,7 @@ Se agreg&#243; soporte para plugins alojados en repositorios GIT.&lt;/p&gt;
 
 &lt;h2&gt;Ruby-debug Nativo&lt;/h2&gt;
 
-&lt;p&gt;Fue habilitado nuevamente la opci&#243;n para utilizar &lt;strong&gt;ruby-debug&lt;/strong&gt; en pruebas con Rails. Ahora, teniendo en cueta que ten&#233;s la gema instalada, solo se necesita el m&#233;todo &lt;strong&gt;debugger&lt;/strong&gt;.&lt;/p&gt;
+&lt;p&gt;Fue habilitada nuevamente la opci&#243;n para utilizar &lt;strong&gt;ruby-debug&lt;/strong&gt; en pruebas con Rails. Ahora, teniendo en cuenta que la gema debe estar instalada, s&#243;lo se necesita el usar el m&#233;todo &lt;strong&gt;debugger&lt;/strong&gt;.&lt;/p&gt;
 
 &lt;!-- -*- mode: markdown; coding: utf-8; -*- --&gt;
 
@@ -2058,9 +2058,9 @@ Se agreg&#243; soporte para plugins alojados en repositorios GIT.&lt;/p&gt;
 &lt;!-- -*- mode: markdown; coding: utf-8; -*- --&gt;
 
 
-&lt;h2&gt; Aregar columnas en PostgreSQL&lt;/h2&gt;
+&lt;h2&gt; Agregar columnas en PostgreSQL&lt;/h2&gt;
 
-&lt;p&gt;Hab&#237;a un bug usando  &lt;strong&gt;PostgreSQL&lt;/strong&gt;. El bug ocurr&#237;a cuando creabamos una migraci&#243;n para agregar una columna en una tabla existente. Por ejemplo:&lt;/p&gt;
+&lt;p&gt;Exist&#237;a un bug cuando se usaba &lt;strong&gt;PostgreSQL&lt;/strong&gt;. El bug ocurr&#237;a cuando creabamos una migraci&#243;n para agregar una columna en una tabla existente. Por ejemplo:&lt;/p&gt;
 
 &lt;p&gt;Archivo: &lt;em&gt;db/migrate/002_add_cost.rb&lt;/em&gt;&lt;/p&gt;
 
@@ -2076,7 +2076,7 @@ Se agreg&#243; soporte para plugins alojados en repositorios GIT.&lt;/p&gt;
     &lt;span class=&quot;Keyword&quot;&gt;end&lt;/span&gt;
 &lt;/pre&gt;
 
-&lt;p&gt;Note que estamos creadno una columna con &lt;strong&gt;:precision =&gt; 6&lt;/strong&gt; y  &lt;strong&gt;:scale =&gt; 2&lt;/strong&gt;. Ahora ejecutamos &lt;strong&gt;rake db:migrate&lt;/strong&gt; y vemos como se ve nuestra tabla en la base de datos:&lt;/p&gt;
+&lt;p&gt;Note que estamos creando una columna con &lt;strong&gt;:precision =&gt; 6&lt;/strong&gt; y  &lt;strong&gt;:scale =&gt; 2&lt;/strong&gt;. Ahora ejecutamos &lt;strong&gt;rake db:migrate&lt;/strong&gt; y vemos como se ve nuestra tabla en la base de datos:&lt;/p&gt;
 
 &lt;table border=&quot;1&quot; cellspacing=&quot;0&quot; cellpadding=&quot;5&quot;&gt;
         &lt;tr&gt;
@@ -2107,7 +2107,7 @@ Se agreg&#243; soporte para plugins alojados en repositorios GIT.&lt;/p&gt;
 &lt;/table&gt;
 
 
-&lt;p&gt;Vea la columna &quot;cost&quot; que acabamos de crear. Es un &lt;strong&gt;numeric&lt;/strong&gt; com&#250;n, pero deber&#237;a ser como la columna &quot;price&quot; de arriba, m&#225;s precisamente un &lt;strong&gt;numeric(6,2)&lt;/strong&gt;. En Rails 2.1 este error no sucede m&#225;s y la columan se crea correctamente.&lt;/p&gt;
+&lt;p&gt;Vea la columna &quot;cost&quot; que acabamos de crear. Es un &lt;strong&gt;numeric&lt;/strong&gt; com&#250;n, pero deber&#237;a ser como la columna &quot;price&quot; de arriba, m&#225;s precisamente un &lt;strong&gt;numeric(6,2)&lt;/strong&gt;. En Rails 2.1 este error no sucede m&#225;s y la columa se crea correctamente.&lt;/p&gt;
 
 &lt;!-- -*- mode: markdown; coding: utf-8; -*- --&gt;
 
@@ -2148,7 +2148,7 @@ Se agreg&#243; soporte para plugins alojados en repositorios GIT.&lt;/p&gt;
 
 &lt;p&gt;Vea la llamada al m&#233;todo  &lt;strong&gt;protect_from_forgery&lt;/strong&gt;.&lt;/p&gt;
 
-&lt;p&gt;&#191;Escuch&#243; hablar sobre Cross Site Scripting? Este es el nombre de un fallo de seguridad que se puede encontrar en la mayor&#237;a de los sitios y aplicaciones web que permiten a gente mala (estoy hablando de adolescentes que no tienen nada que hacer y tampoco tienen vida social) alterar el contenido de las p&#225;ginas web, para llevar acabo 'fishing attacks', tomando el control del navegador a trav&#233;s de c&#243;digo javascript y en la mayor&#237;a de las veces forzando el usuario a ejecutar un el comando que ellos quieran. Este &#250;ltimo tipo de ataque se llama 'cross-site request forgery'.&lt;/p&gt;
+&lt;p&gt;&#191;Escuch&#243; hablar sobre Cross Site Scripting? Este es el nombre de un fallo de seguridad que se puede encontrar en la mayor&#237;a de los sitios y aplicaciones web que permiten a gente mala (estoy hablando de adolescentes que no tienen nada que hacer y tampoco tienen vida social) alterar el contenido de las p&#225;ginas web, para llevar acabo 'fishing attacks', tomando el control del navegador a trav&#233;s de c&#243;digo javascript y en la mayor&#237;a de las veces forzando el usuario a ejecutar el comando que ellos quieran. Este &#250;ltimo tipo de ataque se llama 'cross-site request forgery'.&lt;/p&gt;
 
 &lt;p&gt;Cross Site Request Forgery es un tipo de ataque fuerza al usuario a ejecutar comandos si que este lo sepa. Y con el incremento del uso de ajax, las cosas empeoran.&lt;/p&gt;
 
@@ -2164,14 +2164,14 @@ Se agreg&#243; soporte para plugins alojados en repositorios GIT.&lt;/p&gt;
 &lt;/ul&gt;
 
 
-&lt;p&gt;Pero recuerde que esta no es una soluci&#243;n definitiva al problema, o como decimos comunmente, noes una bala de plata.&lt;/p&gt;
+&lt;p&gt;Pero recuerde que esta no es una soluci&#243;n definitiva al problema, o como decimos comunmente, no es una bala de plata.&lt;/p&gt;
 
 &lt;!-- -*- mode: markdown; coding: utf-8; -*- --&gt;
 
 
 &lt;h2&gt; Use method_missing, sin dejar cabos sueltos&lt;/h2&gt;
 
-&lt;p&gt;Debido a la naturaleza din&#225;mica de Ruby, el m&#233;todo &lt;strong&gt;respond_to?&lt;/strong&gt; es crucial. &#191;Cuantas veces necesitamos verificar si un m&#233;todo existe en el objeto que estamos manipulando, o si un objeto es lo que estamos esperando (&lt;strong&gt;is_a?&lt;/strong&gt;)?&lt;/p&gt;
+&lt;p&gt;Debido a la naturaleza din&#225;mica de Ruby, el m&#233;todo &lt;strong&gt;respond_to?&lt;/strong&gt; es crucial. &#191;Cu&#225;ntas veces necesitamos verificar si un m&#233;todo existe en el objeto que estamos manipulando, o si un objeto es lo que estamos esperando (&lt;strong&gt;is_a?&lt;/strong&gt;)?&lt;/p&gt;
 
 &lt;p&gt;Sin embargo hay algo muy importante que mucha gente olvida. Mire por ejemplo esta clase que usa el m&#233;todo &lt;strong&gt;method_missing&lt;/strong&gt;:&lt;/p&gt;
 
@@ -2191,7 +2191,7 @@ Se agreg&#243; soporte para plugins alojados en repositorios GIT.&lt;/p&gt;
     rex.&lt;span class=&quot;FunctionName&quot;&gt;ladrar_y_correr&lt;/span&gt; &lt;span class=&quot;Comment&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;#&lt;/span&gt;=&amp;gt; woofwoof!&lt;/span&gt;
 &lt;/pre&gt;
 
-&lt;p&gt;Creo que ud conoce &lt;strong&gt;method_missing&lt;/strong&gt;, o no? En el ejemplo de arriba estoy creando una instacia de la clase &lt;strong&gt;Perro&lt;/strong&gt; y llamando a los m&#233;todos &lt;strong&gt;ladrar&lt;/strong&gt;, &lt;strong&gt;ladrar!&lt;/strong&gt; y &lt;strong&gt;ladrar&lt;em&gt;y&lt;/em&gt;correr&lt;/strong&gt; que no existen. Entonces el m&#233;todo &lt;strong&gt;method_missing&lt;/strong&gt; es invocado, d&#243;nde uso una simple expresi&#243;n regular para retornar &quot;woofwoof!&quot;, en caso de que el nombre del m;etodo comience con ladrar.&lt;/p&gt;
+&lt;p&gt;Creo que ud conoce &lt;strong&gt;method_missing&lt;/strong&gt;, o no? En el ejemplo de arriba estoy creando una instacia de la clase &lt;strong&gt;Perro&lt;/strong&gt; y llamando a los m&#233;todos &lt;strong&gt;ladrar&lt;/strong&gt;, &lt;strong&gt;ladrar!&lt;/strong&gt; y &lt;strong&gt;ladrar&lt;em&gt;y&lt;/em&gt;correr&lt;/strong&gt; que no existen. Entonces el m&#233;todo &lt;strong&gt;method_missing&lt;/strong&gt; es invocado, donde uso una simple expresi&#243;n regular para retornar &quot;woofwoof!&quot;, en caso  que el nombre del m&#233;todo comience con ladrar.&lt;/p&gt;
 
 &lt;p&gt;Pero veamos que pasa cuando intento usar el m&#233;todo &lt;strong&gt;respond_to?&lt;/strong&gt;:&lt;/p&gt;
 
@@ -2199,7 +2199,7 @@ Se agreg&#243; soporte para plugins alojados en repositorios GIT.&lt;/p&gt;
     rex.&lt;span class=&quot;FunctionName&quot;&gt;ladrar&lt;/span&gt; &lt;span class=&quot;Comment&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;#&lt;/span&gt;=&amp;gt; woofwoof!&lt;/span&gt;
 &lt;/pre&gt;
 
-&lt;p&gt;Retorna false, y tiene mucho sentido dado que el m&#233;todo no existe realmente. Entonces es mi responsabilidad cambiar el m&#233;todo &lt;strong&gt;respond_to?&lt;/strong&gt; para que funcione correctamente con esta regla especial. Voy a cambiar mi clase as&#237;:&lt;/p&gt;
+&lt;p&gt;Retorna false, y tiene mucho sentido dado que el m&#233;todo no existe realmente. Entonces es mi responsabilidad cambiar el m&#233;todo &lt;strong&gt;respond_to?&lt;/strong&gt; para que funcione correctamente con esta regla especial. Voy a modificar mi clase de la siguiente forma:&lt;/p&gt;
 
 &lt;pre class=&quot;mac_classic&quot;&gt;    &lt;span class=&quot;Keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;TypeName&quot;&gt;Perro&lt;/span&gt;
       &lt;span class=&quot;Variable&quot;&gt;METODO_LADRAR&lt;/span&gt; &lt;span class=&quot;Keyword&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;^ladrar&lt;/span&gt;&lt;span class=&quot;String&quot;&gt;&lt;span class=&quot;String&quot;&gt;/&lt;/span&gt;&lt;/span&gt;
@@ -2223,18 +2223,18 @@ Se agreg&#243; soporte para plugins alojados en repositorios GIT.&lt;/p&gt;
     rex.&lt;span class=&quot;FunctionName&quot;&gt;ladrar&lt;/span&gt; &lt;span class=&quot;Comment&quot;&gt;&lt;span class=&quot;Comment&quot;&gt;#&lt;/span&gt;=&amp;gt; woofwoof!&lt;/span&gt;
 &lt;/pre&gt;
 
-&lt;p&gt;Ahora s&#237;! Este es un error muy com&#250;n que he visto en algunos c&#243;digos, inclusive el propio Rails. Intente ejecutar el m&#233;todo  &lt;strong&gt;respond_to?&lt;/strong&gt; para verificar la existencia de m&#233;todos como &lt;strong&gt;find_by_name&lt;/strong&gt;, por ejemplo.&lt;/p&gt;
+&lt;p&gt;Ahora s&#237;! Este es un error muy com&#250;n que he visto en algunos c&#243;digos, inclusive en el propio Rails. Intente ejecutar el m&#233;todo  &lt;strong&gt;respond_to?&lt;/strong&gt; para verificar la existencia de m&#233;todos como &lt;strong&gt;find_by_name&lt;/strong&gt;, por ejemplo.&lt;/p&gt;
 
 &lt;p&gt;Ruby es un lenguaje impresionante y altamente flexible, pero si no prestamos atenci&#243;n podemos dejar cabos sueltos como este.&lt;/p&gt;
 
-&lt;p&gt;Por supuesto que en Rails 2.1 este problema se solucion&#243;, podemos usar  &lt;strong&gt;respond_to?&lt;/strong&gt; para verificar la existencia de m&#233;todos como &lt;strong&gt;find_by_algo&lt;/strong&gt;.&lt;/p&gt;
+&lt;p&gt;Por supuesto que en Rails 2.1 este problema ya se solucion&#243;. Podemos usar  &lt;strong&gt;respond_to?&lt;/strong&gt; para verificar la existencia de m&#233;todos como &lt;strong&gt;find_by_algo&lt;/strong&gt;.&lt;/p&gt;
 
 &lt;!-- -*- mode: markdown; coding: utf-8; -*- --&gt;
 
 
 &lt;h2&gt; PostgreSQL&lt;/h2&gt;
 
-&lt;p&gt;En Rails 2.0, el adaptador para &lt;strong&gt;PostgreSQL&lt;/strong&gt; ten&#237;a soporte solamente para las versiones 8.1 hasta 8.3. Se agreg&#243; soporte para las versiones 7.4 hasta la 8.3&lt;/p&gt;
+&lt;p&gt;En Rails 2.0, el adaptador para &lt;strong&gt;PostgreSQL&lt;/strong&gt; ten&#237;a soporte solamente para las versiones 8.1 hasta 8.3. Se agreg&#243; soporte para las versiones 7.4 hasta la 8.3.&lt;/p&gt;
 
 &lt;h1&gt; CHANGELOG&lt;/h1&gt;
 </diff>
      <filename>output/index.html</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>db7f1920fdbd13a75ebee17ae4175ca08582349e</id>
    </parent>
  </parents>
  <author>
    <name>Gaston Ramos</name>
    <email>ramos.gaston@gmail.com</email>
  </author>
  <url>http://github.com/gramos/rails21-book-es/commit/ce7a50a5692e5680b96ea8843385a6d1cb254929</url>
  <id>ce7a50a5692e5680b96ea8843385a6d1cb254929</id>
  <committed-date>2008-08-29T08:02:46-07:00</committed-date>
  <authored-date>2008-08-29T08:02:46-07:00</authored-date>
  <message>traduccion del libro completo terminada</message>
  <tree>d11ec5ccf30428d081779e1401fa0aa31789c898</tree>
  <committer>
    <name>Gaston Ramos</name>
    <email>ramos.gaston@gmail.com</email>
  </committer>
</commit>
