on   Ruby on Rails

Ruby - El mejor amigo de un desarrollador, 1995

Index


Básico

Ruby

Intro

Creador Yukihiro Matsumoto, liberado en 1995

La belleza de Ruby se encuentra en su equilibrio entre sencillez y potencia.

Es usado para crear sistemas web, escritorio, móvil, administración de servidores.

  • Obtén la versión correcta para Ruby: www.ruby-lang.org
  • Instala Ruby.
  • Verifica desde la consola que se instaló correctamente con el comando: ruby --version
  • Lee la documentación: Documentación
Características

  • Orientado a objetos
  • Variables de tipo de clase dinámico
  • Código abierto
  • Enfocado en la simplicidad y productividad
  • Elegante sintaxis que se siente natural al leerla y fácil al escribirla.
  • Definición de métodos en tiempo de ejecución para dar paso a la metaprogramación
  • Bloques/closures
  • Todo es una expresión por lo tanto devuelve un valor
Interprete

MRI Matz Ruby Interpreter o CRuby (ya que está escrito en C) herramienta que interpreta y ejecuta código Ruby.

Ruby, como lenguaje, tiene algunas implementaciones diferentes: Cardinal, MagLev, IronRuby, mruby, TruffleRuby, Rubinius, JRuby, etc.

Rubie

Versión de Ruby + Plataforma en la que se implementó

Gema

Biblioteca de código escrita en Ruby y empaquetada como gem

Son piezas de código pequeñas que permiten la portabilidad de funcionalidades a través de cualquier otro sistema de Ruby que este construyendo.

Existen Gemas de terceros como es el caso de https://rubygems.org/

Estas pueden ser obtenidas con el comando gem

Una de las Gemas más conocidas es:

gem install rails

Puede que requiera de elevación de permisos para su instalación.

Para actualizar el comando gem utilice:

gem update --system

Para listar la lista de gemas:

gem list

https://guides.rubygems.org/

Script

Archivo de texto plano en Ruby que no necesariamente tiene una clase definida.

Administradores de rubies

RVM es una herramienta de línea de comandos que le permite instalar, administrar y trabajar fácilmente con múltiples entornos ruby, desde intérpretes hasta conjuntos de gemas.

Para instalar RVM accede a su página para encontrar el modo de instalación actual.

Por ejemplo para cuando se escribió lo que estas leyendo (05122020) se tenía que hacer con el comando: gpg2, al no tenerlo instalado entonces ejecute el siguiente comando para su instalación en Ubuntu:

sudo apt install gnupg2

Listo ya se ejecuto el comando completo como se indica en el sitio.

Install

Ahora intentamos el comando con curl (biblioteca y un intérprete de comandos orientado a la transferencia de archivos): \curl -sSL https://get.rvm.io | bash -s stable

Terminando la descarga del script se instala e indica que para poder ejecutar rvm se requiere:

To start using RVM you need to run source /home//.rvm/scripts/rvm

Para comprobar que esta instalado:

rvm --version

rvm 1.29.10 (latest) by Michal Papis, Piotr Kuczynski, Wayne E. Seguin [https://rvm.io]

Ahora se tiene que instalar un Rubi, en la Documentación y apartado Rubies, tenemos la sección de Installing (http://rvm.io/rubies/installing):

Para conocer cuales están disponibles se ejecuta el comando:

rvm list known

Instalación rápida:

rvm install 2.1.1

Ooops!, me marco error la instalación, pero me indica que ejecute mejor:

sudo apt install ruby

Comprobrar instalación:

ruby --version (instala la última versión disponible)

ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux-gnu]

Nota: puede ser que se requiera instalar Homebrew (Homebrew es un sistema de gestión de paquetes que simplifica la instalación, actualización y eliminación de programas en los sistemas operativos Mac OS de Apple y GNU/Linux. ) para dependencias.

Se puede ejecutar el siguiente comando para saber si tenemos instalados ya rubies:

rvm list

Es posible instalar diferentes motores o interpretes para Ruby.

Para especificar con que motor queremos trabajar se ejecuta el comando:

rvm use <engine>

Por ejemplo:

rvm use jruby

Para verificar que tenemos en uso volvemos a ejecutar el comando de versión:

ruby -v

Para especificar una versión por defecto se usa el comando:

rvm --default use <engine>

Administrador de Rubies rbenv

https://github.com/rbenv/rbenv

How It Works

At a high level, rbenv intercepts Ruby commands using shim executables injected into your PATH, determines which Ruby version has been specified by your application, and passes your commands along to the correct Ruby installation.

Understanding PATH

When you run a command like ruby or rake, your operating system searches through a list of directories to find an executable file with that name. This list of directories lives in an environment variable called PATH, with each directory in the list separated by a colon:

/usr/local/bin:/usr/bin:/bin

Directories in PATH are searched from left to right, so a matching executable in a directory at the beginning of the list takes precedence over another one at the end. In this example, the /usr/local/bin directory will be searched first, then /usr/bin, then /bin.

Understanding Shims

rbenv works by inserting a directory of shims at the front of your PATH:

~/.rbenv/shims:/usr/local/bin:/usr/bin:/bin Through a process called rehashing, rbenv maintains shims in that directory to match every Ruby command across every installed version of Ruby—irb, gem, rake, rails, ruby, and so on.

Instalación

git clone https://github.com/rbenv/rbenv.git ~/.rbenv

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc (ubuntu)

~/.rbenv/bin/rbenv init

sudo apt install rbenv

Comandos ruby

Para conocer el manual de ruby:

man ruby

ruby [switches]:

ruby --help

Para enviar un mensaje a la consola:

ruby -e 'puts "Hola mundo"'

La extensión de los archivos en ruby son .rb así que crearemos el clásico Hola mundo, para ello cree un nuevo archivo, escriba su código, almacene con la extensión .rb



En este caso la palabra reservada puts envía como salida a la consola lo que esta encerrado entre comillas dobles o simples.

Para ejecutar el programa escrito en ruby, use el comando ruby, un espacio seguido del nombre del archivo con extensión .rb



La palabra reservada ARGV contiene una lista de argumentos con los que es posible ejecutar un programa:



Ejecute de nuevo con ruby y el nombre del programa con extensión *.rb seguido de los argumentos separados por un espacio:



Como parte del resultado estamos indicando mostrar los argumentos con los que fue invocado el programa.

Parámetros Vs. Argumentos

Un parámetro es una variable en la definición de un método.

Cuando se llama a un método, los argumentos son los datos que pasa a los parámetros del método.

Un argumento se refiere a los valores que se pasan dentro de una función cuando se invoca a la función. Estos valores son generalmente la fuente de la función que requiere los argumentos durante el proceso de ejecución. Estos valores se asignan a las variables en la definición de la función que se invoca. El tipo de los valores pasados en la función es el mismo que el de las variables definidas en la definición de la función. También se denominan argumentos reales o parámetros reales.

El parámetro se conoce como las variables que se definen durante la declaración o definición de una función. Estas variables se utilizan para recibir los argumentos que se pasan durante la invocación a una función. Estos parámetros dentro del prototipo de función se utilizan durante la ejecución de la función para la que está definida. También se denominan argumentos formales o parámetros formales.

El parámetro es una variable definida en la definición de la función, mientras que el argumento es el valor real pasado a la función.

El parámetro es un tipo especial de variable declarado en la firma de la función. Es un marcador de posición que se utiliza para acceder a los datos de entrada de la función (argumento).

El argumento, por otro lado, es el valor real que se pasa a una función cuando se invoca a la función.

En programación de computadoras, un parámetro o un argumento formal, es un tipo especial de variable, usado en una subrutina para referirse a uno de los datos proporcionados como entrada a la subrutina. Estos datos son los valores de los argumentos (a menudo llamados argumentos reales o parámetros reales) con los que se llamará / invocará la subrutina. Una lista ordenada de parámetros generalmente se incluye en la definición de una subrutina, de modo que, cada vez que se llama a la subrutina, se evalúan sus argumentos para esa llamada y los valores resultantes se pueden asignar a los parámetros correspondientes.

A diferencia del argumento en el uso matemático habitual, el argumento en ciencias de la computación es, por lo tanto, la expresión de entrada real pasada / suministrada a una función, procedimiento o rutina en la declaración de invocación / llamada, mientras que el parámetro es la variable dentro de la implementación de la subrutina.

Interactive Ruby Shell - irb

El programa se lanza desde una línea de comandos y permite la ejecución de comandos Ruby con respuesta inmediata, experimentando en tiempo real. Cuenta con historial de comandos, capacidades de edición de línea y control de trabajos, y puede comunicarse directamente como un script de shell a través de Internet e interactuar con un servidor en vivo. Fue desarrollado por Keiju Ishitsuka.

Es una herramienta de Ruby, que permite interactuar con el sistema operativo a través del comando irb

Al momento de ejecutar el comando, accede al entorno de irb:



En este entorno existen más comandos como self para saber a quién pertenece.

Es un entorno similar al de Julia y Python, donde se pueden definir variables y despues mostrar su valor, operaciones matemáticas, etc.



De manera similiar a otros ambientes para salir ingrese: quit

erb

El comando erb permite usar plantillas de documentos con Ruby, al estilo de PHP o ASP.

Para que esto sea posible se utiliza una sintaxis familiar si es que tienes experiencia web:

<% sintaxisRuby %>

Por ejemplo podemos tener un documento HTML y definir una variable al estilo Ruby y después mostrar el valor de esta variable, para ello solo tendremos que agregar el signo igual:

<%= variable %>



Para visualizar la salida de la plantilla se ejecuta el comando erb seguido del nombre del archivo con extensión .erb



Para definir variables de instancia use:

@user = "nombre"

Variables

Ruby tiene strings

strSaludo1 = "Hola con comillas dobles"

strSaludo2 = 'Hola con comillas simples'

Enteros

entero1 = 1000

entero2 = 1_000 (el guión bajo es para claridad pero el valor es mil) Decimales

sueldo = 1.99

Arrays el índice comienza en cero, puede contener cualquier tipo de dato.

vector = [1,true,3.14,"hola mundo", 5_000]



Diccionarios, en una relación clave-valor



Rangos, definen listas de objetos sin la necesidad de describir los elementos de en medio.

satOxigeno = 94..99

Objeto nulo: nil

Métodos

Un método permite desacoplar la lógica del código.

Para definir un método es (como en Python) con la palabra reservada def seguido del nombre del método o función y para finalizar se usa la palabra reservada end. Ruby hace uso de la notación snake case es decir cada palabra se separa por un guión bajo.

La última línea de la función en Ruby, significa el valor que va a regresar.



to_s es una función predefinida en Ruby para convertir un valor numérico a string La invocación a la función debe estar después de su definición.

Se pueden emplear los paréntesis al invocar una función.

Cada saldo de línea significa una nueva instrucción. En Ruby todo es un objeto y todo son métodos.

Métodos con parámetros



Métodos con parámetros por default

Sirven para establacer un valor por defecto al párametro en caso de que no tenga valor el argumento recibido.



Métodos con parámetros múltiples

Se antepone al nombre del parámetro un asterisco * para indicar que es una lista de n parámetros.

Los paréntesis en la definición de la función son opcionales, así como en su invocación.



Métodos con parámetro con nombre

Para definir un método con parémetros con nombre se usa la notación de dos puntos al final de cada parametro, al invocar el método el orden de los argumentos no importa, ya que van relacionados por nombre.



Expresiones

Una expresión a diferencia de una sentencia, regresa un valor.

La palabra reservada return se usa en casos específicos para regresar un valor.



if, else, elsif, unless



Ciclos: while, until, bloques



Interpolación

En JavaScript o ECMAScript existe algo parecido, que permite definir un texto o string al cual puede ser dinámico al incluir la notación #{} encerrado entre comillas dobles.

La interpolación se encarga de la conversión de tipos.



Clases

Los nombre de las clases siguen la convención camel case, es decir comenzar con una mayúscula.

Los constructores en Ruby se definen a través del método initialize

Cuando una clase es instanciada, se ejecuta por defecto el constructor de la clase.



Propiedades

De manera inicial las variables de instancia son privadas, para poder acceder a estas, se debe crear un método para la propiedad.

Para cambiar el valor de una propiedad, se debe crear un método que asigne el valor de la propiedad.

Los métodos para obtener y asignar el valor a una propiedad se llaman métodos accesorios.



Para no definir un par de métodos por cada propiedad que tenga la clase, existe una forma simplificada de hacer esto a través de attr_accessor seguido del nombre de cada propiedad antecediento a estos dos puntos. Es una función que crea el código del par de métodos de cada variable de instancia para asignar y leer el valor.

attr_writer propiedad solo crea el método de asignación de valores

attr_reader propiedad solo crea el método para obtener el valor



Métodos de clase

Una clase puede tener métodos de instancia y de clase.

Los métodos de clase no necesitan de una instancia para ser invocados.

Para definir un método de clase en Ruby, se emplea la palabra reservada self es similar a this en otros lenguajes, que significa objeto actual seguido de la notación de punto y el nombre del método.

Si desde el método de clase se desea acceder a las variables de clase use la doble arroba seguido del nombre de la propiedad @@propiedad



Herencia

En Ruby la sintaxis empleada para referir que una clase hereda de otra es con el signo menor que y seguido de la clase que se hereda.

La clase principal de la que hereda cualquier clase en Ruby es Object y BasicObject es la clase base de Ruby



¿Y de qué sirve?

  • Se pueden re escribir los métodos de la clase que se hereda


Uso de clases

Es posible tener cada clase en un archivo por separaro.

Para incluir las clases contenidas en los archivos se emplea la palabra clave require seguido entre comillas de la ruta donde se encuentran almancedos los archivos.

Las Gemas actuan como bibliotecas, que contienen funcionalidad especifica y de la misma forma usamos require para incluir funcionalidad de la biblioteca estndar.

Clase Perro



Clase persona que incluye date



Programa que incluye las clases Persona y Perro.



Módulos (doc)

Los módulos son una forma de agrupar métodos, clases y constantes.

Los módulos le brindan dos beneficios principales:

  1. Los módulos proporcionan un espacio de nombres y evitan conflictos de nombres.
  2. Los módulos implementan la facilidad mixin la cual elimina prácticamente la necesidad de herencia múltiple.
Para crear un módulo use la palabra reservada module.

Para agregar un módulo se usa la palabra reservada include seguido del nombre del módulo. Un módulo puede incluir otros módulos y otras clases.



Bloques

Para definir un bloque, se asigna un nombre al bloque seguido de la palabra reservada Proc.new do a continuación puede o no tener parámetros, en caso de que tenga parametros, estos so encerrados entre pipes, el cuerpo del bloque y se finaliza el bloque con la palabra reservada end

Para incluir un bloque como parámetro se emplea la sintaxis &block a manera de variable de tipo bloque.

Cuando en una función se envía como argumento un bloque, se escribe el nombre del bloque antecediendo a este el signo ampersand.



Constantes y símbolos

Para definir una constante se escribe el nombre en mayúsculas.

Una constante siempre tiene el mismo valor y nunca cambia.

Un símbolo se define anteponiendo a su nombre dos puntos.

En Ruby, un símbolo es la forma más eficiente, en términos de tiempo y memoria, de representar un conjunto de caracteres.

Para acceder a las referencias de los objetos se emplea la notación: punto, doble guión bajo, propiedad, doble guión bajo.

Un símbolo apunta a la misma dirección de memoria.

Cada que se crea un string se crea nuevas referencias a memoria.

Un string se puede convertir a símbolo con to_sym



Pruebas

Ruby por defecto instala las bibliotecas necesarias para hacer pruebas con las metodologías: TDD y BDD.

TDD

Desarrollo guiado por pruebas de software, o Test-driven development es una práctica de ingeniería de software que involucra otras dos prácticas: Escribir las pruebas primero y Refactorización. Para escribir las pruebas generalmente se utilizan las pruebas unitarias.

TDD se reduce a una idea simple que tiene 3 partes:

  1. Escriba sus pruebas antes de escribir cualquier línea de código.
  2. Escribe el código más simple para pasar esas pruebas.
  3. Refactorice su código simple a algo más apropiado
BDD

En la Ingeniería de Software, behavior-driven development o desarrollo guiado por el comportamiento, es un proceso de desarrollo de software que surgió a partir del desarrollo guiado por pruebas.​​​

minitest

minitest proporciona un conjunto completo de instalaciones de prueba que admiten TDD, BDD, mocking, y benchmarking.

minitest/test es un framework de prueba unitario pequeño e increíblemente rápido. Proporciona un amplio conjunto de assertions (afirmaciones) para que sus pruebas sean limpias y legibles.

minitest/spec es un motor de especificaciones funcionalmente completo. Se conecta a minitest/test y une sin problemas las assertions de las pruebas con las expectativas de las especificaciones.

minitest/benchmark es una forma increíble de assert el rendimiento de sus algoritmos de manera repetible.

minitest/mock de Steven Baker, es un framework de objeto mock pequeño.

minitest/pride se enorgullece de las pruebas y agrega color a la salida de la prueba. Supongo que también es un ejemplo de cómo escribir tuberías IO.

minitest/test está destinado a tener una implementación limpia para los implementadores de lenguaje que necesitan un conjunto mínimo de métodos para arrancar un conjunto de pruebas en funcionamiento.

Pruebas unitarias

Por convención el nombre de los archivos de pruebas comienzan con la palabras test seguida de la notación snake case.

Primero debemos incluir la biblioteca:

require "minitest/autorun"

Después creamos la clase que por convención comienza el nombre con Test y debe heredar de la Clase Minitest y acceder por medio de la notación de dos puntos, dos puntos para acceder al tipo de prueba que se realice. Por ejemplo: Minitest::Unit::TestCase

Y donde cada método es un caso de prueba.

El valor esperado es definido por el método:

assert_equal(<valor_esperado>, método(<lista_argumentos>))

Al ejecutar la prueba, se debe indicar al final de esta el número de:

n runs, n assertions, n failures, n errors, n skips

Nota: Se debe tener cuidado en el nombre de las pruebas, ya que si tienen nombres iguales se re escriben y se considera solo la última.

Función a probar:



Prueba:



Resultado de la prueba:



Especificaciones

Por convención el nombre de la prueba comienza con el nombre del objeto de prueba seguido de la palabra spec en notación snake case.



Resultado de la prueba:



Benchmark

Para este tipo de prueba, además de incluir la biblioteca de autorun se debe incluir la propia biblioteca de desempeño:

require "minitest/benchmark"

Como buena práctica nombre el archivo iniciando con el nombre del objeto a probar seguido de la palabra perform, para saber de que es la prueba.




Rails

Rails es un web application framework que se ejecuta en el lenguaje de programación Ruby.

Escrito en el lenguaje de programación Ruby.

Está diseñado para facilitar la programación de aplicaciones web al hacer suposiciones sobre lo que todo desarrollador necesita para comenzar.

Le permite escribir menos código mientras logra más que muchos otros lenguajes y marcos.

Los desarrolladores experimentados de Rails también informan que hace que el desarrollo de aplicaciones web sea más divertido.

Rails es un software obstinado. Supone que hay una "mejor" forma de hacer las cosas y está diseñado para fomentar esa forma y, en algunos casos, desalentar las alternativas.

Si aprende "The Rails Way" probablemente descubrirá un tremendo aumento en la productividad.

Si persiste en llevar viejos hábitos de otros idiomas a su desarrollo de Rails y trata de usar patrones que aprendió en otros lugares, es posible que tenga una experiencia menos feliz.

La filosofía de Rails incluye dos principios rectores principales:

  1. Don't Repeat Yourself

    DRY es un principio de desarrollo de software que establece que "Cada pieza de conocimiento debe tener una representación única, inequívoca y autorizada dentro de un sistema".

    Al no escribir la misma información una y otra vez, nuestro código es más fácil de mantener, más extensible y con menos errores.

  2. Convención sobre configuración

    Rails tiene opiniones sobre la mejor manera de hacer muchas cosas en una aplicación web, y por defecto se ajusta a este conjunto de convenciones, en lugar de requerir que especifique minucias a través de archivos de configuración interminables.
Crear un proyecto en rails

Para crear un proyecto se emplea el comando rails new y nombre de proyecto Nombre:

rails new Motos

Este comando crea toda la estructura de archivos, bibliotecas, configuraciones necesarias y como resultado se genera un directorio con el nombre del proyecto en rails.

Iniciar servidor web del proyecto en rails

Para iniciar el servidor web del proyecto creado, como primer paso es cambiarnos a la ubicación del nuevo proyecto

cd nombreProyecto

A continuación solo se debe ejecutar el siguiente comando el cual iniciará el servidor web para el proyecto:

rails s (comando abreviado) o bien rails server

Deberás esperar un momento en lo que rails prepara el ambiente...

Rails indicará la dirección IP y puerto para acceder en modo web mediante un navegador o browser.

Esta IP es equivalente al dns localhost, por lo que se podría acceder colocando en el URL:

localhost:<puerto> o bien ip:<puerto>

Si todo bien, se presenta la bienvenida y la siguiente imagen:



Arquitectura Rails

Rails sigue el Patrón MVC (Modelo - Vista - Controlador).

Donde el modelo corresponde a los datos o estado del sistema (negocio / bd).

El controlador realiza las operaciones hechas con el modelo para envíar el resultado a la vista (lógica y decisiones).

La vista presenta el resultado de las operaciones (HTML / JSON).

Scaffolding

El scaffolding de rails es una forma rápida de generar algunas de las piezas principales de una aplicación. Si desea crear los modelos, vistas y controladores para un nuevo recurso en una sola operación, el scaffolding es la herramienta para el trabajo.

Para conocer las opciones consultar la ayuda:

rails generate scaffold --help

Crear recurso

Para crear un recurso scaffold se usa el comando

rails generate scaffold

Este comando requiere el nombre del recurso> y a continuación el nombre y tipo de sus propiedades, ejemplo:

rails generate scaffold Post name:string title:string content:text

El generador de scaffolding creará varios archivos en su aplicación, junto con algunas carpetas, y editará config / routes.rb.

Si después de esta operación inicia el servidor web, obtendrá el siguiente error:

ActiveRecord::PendingMigrationError

Esto es porque uno de los productos del comando rails generate scaffold es una migración de base de datos.

Las migraciones son clases de Ruby que están diseñadas para simplificar la creación y modificación de tablas de bases de datos.

Rails usa comandos de rake para ejecutar migraciones y es posible deshacer una migración después de que se haya aplicado a su base de datos.

Los nombres de archivos de migración incluyen una marca de tiempo para garantizar que se procesen en el orden en que se crearon.

Esta migración crea un método llamado cambio que se llamará cuando ejecute esta migración.

La acción definida en este método también es reversible, lo que significa que Rails sabe cómo revertir el cambio realizado por esta migración, en caso de que desee revertirlo más adelante.

Cuando ejecute esta migración, creará una tabla de publicaciones con dos columnas de cadena y una columna de texto.

También crea dos campos de marca de tiempo para permitir que Rails rastree los tiempos de creación y actualización de publicaciones.

Conocer más...

Por tato puede usar un comando rake para ejecutar la migración:

rake db:migrate

Rails ejecutará este comando de migración y le dirá que creó la tabla de Publicaciones.

Ahora si puede iniciar el servidor web rails s

Para ver el resultado en su servidor web coloque al final el nombre de su recurso /posts

http://localhost:3000/posts

Rails Routing

El Rails router reconoce las URL y las envía a la acción de un controlador o a una aplicación de Rack.

También puede generar rutas y URL, evitando la necesidad de codificar cadenas en sus vistas.

Mapean las direcciones URL a los controladores y sus acciones, y principalmente son las que nos van a permitir interactuar directamente con la petición web de un recurso.

Conectando URL al código

Cuando la aplicación Rails recibe una solicitud entrante de un recurso get /path/value le pide al enrutador que lo haga coincidir con una acción del controlador.

Configuración del enrutador Rails

Las rutas o mapeo para su aplicación o motor se encuentran en el archivo config/routes.rb

Donde se define el ruteo controlador de que acción:

root "controlador/acción" ejemplo root "welcome#index"

Los controllers se ubican en:

\<proyectoRuby>\app\controllers\routes.rb

Con el siguiente comando de rake podemos consultar todas las rutas que existen en mi aplicación de Rails.

rake routes

Se indica el prefijo, verbos (Métodos de petición http), URI, patrón y Controller#Action.

Enrutamiento y espacios de nombres del controlador

Es posible que desee organizar grupos de controladores en un espacio de nombres.

Por lo general, puede agrupar varios controladores administrativos en un espacio de nombres Admin :: y colocar estos controladores en el directorio app/controllers/admin.

Enrutamiento y espacios de nombres del controlador

La configuración de la conexión a una base de datos se puede consultar en el archivo:

<proyectoRuby>\config\database.yml

Preinicializador

Rails te permite usar un preinicializador para ejecutar código antes de que se cargue el marco.

Si guarda código en RAILS_ROOT/config/preinitializer.rb, ese código será lo primero que se cargue, antes de cualquiera de los componentes del framework (Active Record, Action Pack, etc.).

Si desea cambiar el comportamiento de uno de las clases que se utilizan en el proceso de inicialización, puede hacerlo en este archivo.

Rails ofrece cuatro puntos estándar para colocar el código de inicialización:

  1. config/application.rb
  2. Environment-specific configuration files
  3. Initializers
  4. After-initializers
Opciones de inicio del servidor web

Con el siguiente comando podemos obtener ayuda para como poder iniciar el servidor web:

rails server --help

rails s -p <port> inicia el servidor web en el puerto especificado.

Rails Command Line

Hay algunos comandos que son absolutamente críticos para el uso diario de Rails.

En el orden de cuánto probablemente los usará están:

  • bin/rails console
  • bin/rails server
  • bin/rails test
  • bin/rails generate
  • bin/rails db:migrate
  • bin/rails db:create
  • bin/rails routes
  • bin/rails dbconsole
  • rails new app_name
Puede obtener una lista de los comandos de rails disponibles, que a menudo dependerán de su directorio actual, escribiendo rails --help.

Cada comando tiene una descripción y debería ayudarlo a encontrar lo que necesita.

bin/rails dbconsole

Determina qué base de datos está usando y lo lleva a la interfaz de línea de comando que usaría con ella (¡y también descubre los parámetros de la línea de comando para darle!)

Es compatible con MySQL (incluido MariaDB), PostgreSQL y SQLite3.

rails dbconsole o bien su alias rails db

Por ejemplo, ejecute:

rails s -d (inicia el servidor)
sqlite3 db/development.sqlite3 (acceder al ambiente de sqlite)
.help (ayuda)
select * from posts; (consulta la tabla)
exit (para salir)

Para ejecutar el servidor como Daemon: rails server -d

Para conocer su process id

ps -fea

Con un filtro para encontrar algo más específico:

ps -fea | grep ruby

more tmp/pids/server.pid

También con:

more tmp/pids/server.pid

Para eliminar el proceso:

kill <numeroProceso>

rails console

El comando de la consola te permite interactuar con tu aplicación Rails desde la línea de comandos.

En la parte inferior, la consola de rieles usa IRB, por lo que si alguna vez la usó, estará como en casa.

Esto es útil para probar ideas rápidas con código y cambiar datos del lado del servidor sin tocar el sitio web. Por ejemplo, ejecute:

rails console o bien su alias rails c

rails generate

El comando usa plantillas para crear un montón de cosas.

rails generate GENERATOR [args] [options]

Ejemplo:

rails generate controller Saludo hola

El cual crea un archivo en:

cat app/controllers/saludo_controller.rb

Es posible revertir esta acción con rails destroy controller para remover lo generado.

rails destroy controller Saludo hola

Rake

Rake es Ruby Make, una utilidad independiente de Ruby que reemplaza la utilidad de Unix 'make', y usa un 'Rakefile' y archivos .rake para crear una lista de tareas.

En Rails, Rake se usa para tareas de administración comunes, especialmente aquellas sofisticadas que se basan unas en otras.

Puede obtener una lista de las tareas de Rake disponibles, que a menudo dependerán de su directorio actual, escribiendo rails --tasks o su alias rails -T

Cada tarea tiene una descripción y debería ayudarlo a encontrar lo que necesita.

rails g task my_namespace my_task1 my_task2

Ejemplo de como crear una tarea:

rails g task posts publish

Como resultado satisfactorio, indicará la ubicación de la tarea creada: create lib/tasks/my_namespace.rake

create lib/tasks/posts.rake

Podemos volver a listar las tareas y verificar que se encuentra la tarea creada con rails -T

Para ejecutar la tarea:

rake posts:publish

Para saber que se ejecuto la tarea usamos la consola de rails:

rails console

En el ambiente de irb podemos consultar:

Post.first

Podemos obtener como salida algo como:

Post Load (0.6ms)
SELECT "posts".* FROM "posts" ORDER BY "posts"."id" ASC LIMIT ? [["LIMIT", 1]]
=> #<Post id: 1, name: "Hola", title: "Test", content: "hello world",
created_at: "2021-01-03 05:14:03", updated_at: "2021-01-03 06:11:15">

rake about

Brinda información sobre los números de versión de Ruby, RubyGems, Rails, los subcomponentes de Rails, la carpeta de su aplicación, el nombre del entorno de Rails actual, el adaptador de base de datos de su aplicación y la versión del esquema.

Es útil cuando necesita pedir ayuda, verificar si un parche de seguridad podría afectarlo o cuando necesita algunas estadísticas para una instalación existente de Rails.

Parámetros

Probablemente desee acceder a los datos enviados por el usuario u otros parámetros en las acciones de su controlador.

Hay dos tipos de parámetros posibles en una aplicación web:

GET

Los primeros son parámetros que se envían como parte de la URL, llamados parámetros de cadena de consulta (query string parameters).

La cadena de consulta es todo después de "?" en la URL.

POST

El segundo tipo de parámetro se suele denominar datos POST. Esta información generalmente proviene de un formulario HTML que ha sido completado por el usuario.

Se denominan datos POST porque solo se pueden enviar como parte de una solicitud HTTP POST.

Rails no hace ninguna distinción entre los parámetros de la cadena de consulta y los parámetros POST, y ambos están disponibles en el hash de params en su controlador params[:<parámetro>]

Generando un modelo

Los modelos en Rails usan un nombre singular y sus tablas de base de datos correspondientes usan un nombre plural.

Para que el modelo contenga comentarios, la convención es usar el nombre Comentario.

Incluso si no desea utilizar todo el aparato creado por scaffolding, la mayoría de los desarrolladores de Rails todavía utilizan generadores para hacer cosas como modelos y controladores.

Para crear el nuevo modelo, ejecute este comando en su terminal:

rails generate model Comment commenter:string body:text post:references

Para consultar la ayuda:

rails generate model --help


References