Por qué Ruby on Rails es uno de los mejores primeros lenguajes de programación para diseñadores. Introducción a Ruby on Rails Conceptos básicos de Ruby on Rails

Hoy encontré una historia en Internet sobre cómo alguien llamado James Fend aprendió Ruby on Rails durante 12 semanas. A continuación puede leer una traducción relativamente precisa de esta historia y, con suerte, inspirarse para explorar este maravilloso marco (y maravilloso lenguaje).

Antes de comenzar, me gustaría presentarles a Josh Crews (http://joshcrews.com) y agradecerle por convencerme de comenzar a aprender Ruby on Rails; Sin él, su ayuda y sin las horas que pasó siendo mi mentor, no estaría escribiendo esto hoy. Gracias.

El 23 de enero lancé la idea de mis sueños, Freelancify.com. Hace exactamente 12 semanas, yo era un emprendedor tecnológico que gastaba miles de dólares para crear un MVP (producto mínimo viable) decente porque carecía de conocimientos. Una de las razones (pensé en ese momento) fue que el entrenamiento era demasiado difícil para mí o me llevaría un tiempo excesivamente largo. Pensé (como muchos otros) que los programadores nacen (y algunos nacen) con un conjunto de habilidades mágicas para la resolución de problemas y matemáticas que los convierten en genios de la programación. Y hace exactamente 12 semanas Tomé la mejor decisión que he tomado en mucho, mucho tiempo.. Ninguna de mis ideas dejará de ser más que una idea. Ahora tengo la oportunidad de lanzar versiones de producción, gastando dinero solo en alojamiento y esforzándome un poco. Hoy en día, este conjunto de habilidades es similar a tirar de un montón de tractores durante la fiebre del oro de California mientras todos los demás usaban palas simples. Sugiero que todos aprendan a escribir código.. Aquí me gustaría agregar una aclaración: antes llamé a la publicación "Cómo aprendí Rails en 8 semanas", pero, para ser precisos, dada la fecha de lanzamiento, resulta que son 12 semanas. Sin embargo, en 8 semanas sentí que sabía lo suficiente y las siguientes cuatro semanas las dediqué más a poner en práctica los conocimientos que había adquirido que a aprender.

¿Qué habilidades tenía antes de empezar a aprender Rails?

Fui diseñador web con conocimientos de HTML y CSS y principalmente enfocado en diseño UI y UX. Lo más difícil que he hecho con el código real (sin contar HTML) es poder personalizar Wordpress. En resumen, no tenía ni idea de qué era un marco MVC o cómo funcionan las bases de datos en general. El diseño, la maquetación y el HTML de Freelancify fueron creados por mí en dos semanas en junio de 2011.

¿Por qué decidí estudiar?

En junio de 2011, cuando el diseño estuvo listo, comencé a buscar un codificador que hiciera que el diseño fuera funcional. El diseño estaba casi listo: tenía campos de texto, menús desplegables, formularios, botones, enlaces que conducían a donde era necesario, etc. Encontré un desarrollador y, en pocas palabras, el tipo no me convenía. Me quedé con un montón de deudas y ningún producto ni siquiera cerca de completarse. Entonces me comuniqué con Josh Krius (lo conocí en una reunión de Ruby on Rails que organizó en Nashville) y me reuní con él para ver si podía hacer algo con lo que me quedaba como desarrollador. Desafortunadamente, arreglar y modificar el código llevaría no menos tiempo que desarrollarlo desde cero por parte de un programador competente. Me desanimé al darme cuenta de que no podía permitirme gastar miles de dólares nuevamente en un desarrollo desde cero. Y entonces Josh dijo... “ ¿Por qué no aprendes a manejar Ruby on Rails? Este proyecto sería una excelente manera." y luego " Incluso puedo reunirme contigo dos veces por semana y ayudarte con tus estudios." Pasé toda la noche pensando en ello. Mis opciones eran: encontrar un trabajo cómodo y pagar las cuentas. O Arriesga todo para aprender Rails y, en última instancia, deléitate con el mejor ramen que Italia tiene para ofrecer. Decidí. Llamé a Josh a la mañana siguiente. Puse todo. Saqué dinero de los ahorros restantes y lo dividí en tres meses (para un hombre soltero que vive solo y sin hijos, mil dólares al mes son suficientes). Es hora de ponerse a trabajar, ahora soy aprendiz de tiempo completo. Teniendo en cuenta que la búsqueda de Google, Stackoverflow, IRC #RubyOnRails y la comunidad Rails me respaldarán cuando me quede atascado, estoy seguro de que habrá muchos de ellos.

Mis próximos tres meses - Misión: Consigue un MVP, consigue lo suficiente para trabajar, pero no lo suficiente como para dejar una primera impresión terrible.

Semanas 1 - 3

Probablemente fue la mayor curva de aprendizaje, pero NO me rendí.

Los muros están hechos para personas que realmente no quieren abandonarlos.

Configurar un entorno Rails que funcione para un completo novato puede ser increíblemente molesto. Consejo n.° 1: consiga una Mac. Consejo #2: Use Homebrew, RVM, Git y Heroku (eso es todo lo que necesita para comenzar). Pasé un par de días instalando, luego lo desinstalé todo y lo instalé nuevamente. Simplemente repítelo unas cuantas veces y te acostumbrarás a usarlo. línea de comando terminal (consola) y comprender por qué las cosas funcionan como lo hacen. Luego, lo primero que comencé fue TryRuby, Rails for Zombies y el tutorial de Rails de Michael Hartle. No te preocupes por entender el material al 120%, no sucederá hasta que empieces a estudiar. Terminé el Tutorial de Rails y creé esta aplicación similar a Twitter en aproximadamente una semana, sin entender realmente lo que había hecho. Luego, a medida que avanzaba, comencé a darme cuenta de que todo empezaba a tener sentido.

Semanas 3 - 6

Con una aplicación de Twitter creada con el Tutorial de Rails, gané algo de confianza. La administración no me convirtió en desarrollador, pero ahora lo sé pasos generales en la creación de aplicaciones, desde la creación de la aplicación hasta su instalación en Heroku. Todo lo que sucedió en el medio permaneció borroso. ¿Cómo puedo REALMENTE empezar a estudiar ahora? Trabajar en un proyecto real que signifique algo para mí.. Josh y yo decidimos que debería trabajar libremente en Freelancify y ver qué podía hacer. Lo primero que hice fue mover todo el HTML del marco y organizarlo en vistas y archivos parciales. He creado plataformas de plantillas con andamios para Usuarios y Proyectos. Luego comencé a aprender mi primera verdadera joya, Devise. Luego, la posibilidad de tener relaciones, por ejemplo, cada Usuario tendrá una cartera. Pero los usuarios pueden tener múltiples carteras, mientras que cada cartera solo puede pertenecer a un usuario. Una vez que comprendas cómo funcionan las relaciones entre modelos y cómo llamar/mostrar cosas que pertenecen a otra cosa, la vida será mucho más fácil. Si te quedas atascado en una pieza y no puedes moverte, sáltala, lo más probable es que mientras desarrollas otra característica, también descubras cómo implementar lo que te perdiste.

Semanas 6 - 9

Paso a paso seguí aprendiendo, copiando y repitiendo. Haría que algunas cosas funcionaran y luego, ¡bam!, me estrellaría contra una pared y no tendría la menor idea de qué hacer a continuación. Ya sea en Stackoverflow, chat IRC #RubyOnRails, RailsCasts o tirando de Josh, finalmente descubrí cómo proceder. Haz lo mismo una y otra vez y lo dominarás bastante rápido. Pasar horas molestas probando la respuesta de alguien en Stackoverflow solo para darte cuenta de que no funciona es realmente útil. Entiendes lo que no debes hacer. Y cuando encuentres la respuesta empezarás a entender. POR QUÉ este último no funcionó. Fue en ese momento cuando comencé a darme cuenta de cuán grande era el panorama de las cosas y a comprender verdaderamente POR QUÉ Todo funciona exactamente como funciona. Me sentí como un idiota y volví atrás y refactoricé el código que había escrito antes para hacerlo más eficiente. Y en algún momento llegué a una etapa en la que todo empezó a encajar.

Semanas 9 - 12

Estaba en un modo de energía increíble al llevar a Freelancify a la etapa de lanzamiento. En esta etapa me sentí como si estuviera volando, poniendo en acción las funciones. La última semana la dedicamos a depurar varios errores y errores. Este lunes lancé el sitio. Pero todavía estoy lejos de completar mis estudios... Eso es todo. He omitido (en aras de la brevedad del post) pequeños detalles y puntos técnicos. Sin embargo, no dudes en hacer preguntas en los comentarios, definitivamente intentaré responderlas. James defender.

PD - Si bien me ayudó mucho tener un mentor con el que pudiera reunirme, definitivamente puedes aprender Rails sin uno. O intente encontrar una persona así; a muchos desarrolladores de Rails les encanta contribuir a la comunidad. Busque conferencias y reuniones locales.

Esta entrada tiene ya más de dos años (publicada el 27 de enero de 2012), pero, sin embargo, no ha perdido su relevancia. Durante este tiempo, James Fend logró vender Freelancify e invertir en una nueva startup, dejó una nota al respecto el 27 de febrero de 2013. Creo que este artículo es un excelente ejemplo de cómo una persona puede lograr su objetivo. Todo lo que tienes que hacer es empezar. :)

Esta guía cubre la instalación y ejecución de Ruby on Rails.

Después de leerlo, aprenderás:

  • Cómo instalar Rails, crear una nueva aplicación Rails y adjuntar su aplicación a una base de datos.
  • La estructura general de una aplicación Rails.
  • Principios básicos de MVC (Modelo, Controlador de Vista) y diseño basado en RESTful.
  • Cómo generar rápidamente código inicial para una aplicación Rails.

Supuestos en este manual

Este tutorial está dirigido a principiantes que quieran iniciar una aplicación Rails desde cero. No se supone que haya trabajado con Rails antes.

Rails es un marco de desarrollo web escrito en el lenguaje de programación Ruby. Si no tiene experiencia con Ruby, puede que le resulte difícil comenzar a aprender Rails. Existen varios buenos recursos en inglés dedicados a aprender Ruby, por ejemplo:

Tenga en cuenta que algunos de los recursos, aunque siguen siendo excelentes, aún cubren versiones anteriores de Ruby, como 1.6, y especialmente 1.8, y no incluyen parte de la sintaxis que verá en el desarrollo diario de Rails.

¿Qué son los rieles?

Rails es un marco de desarrollo web escrito en el lenguaje de programación Ruby. Está diseñado para facilitar la programación de aplicaciones web al hacer una serie de suposiciones sobre lo que cada desarrollador necesita para crear un nuevo proyecto. Le permite escribir menos código durante la programación en comparación con otros lenguajes y marcos. Los desarrolladores profesionales de Rails también notan que hace que el desarrollo de aplicaciones web sea más divertido =)

Rails es un software descarriado. Supone que existe una manera "mejor" de hacer algo, y está diseñado de tal manera que fomenta esa manera (y en algunos casos incluso desalienta) las alternativas. Si aprende "The Rails Way", puede descubrir un aumento significativo en su productividad. Si persiste en incorporar viejos hábitos de otros lenguajes al desarrollo de Rails e intenta utilizar patrones aprendidos en otros lugares, tendrá una experiencia de desarrollo menos feliz.

La filosofía Rails incluye dos principios rectores importantes:

  • No te repitas: DRY es un principio de desarrollo de software que establece que "Cada pieza de información debe tener una representación única, no redundante y autorizada en el sistema". No escriba la misma información una y otra vez, el código será más fácil de mantener y será más extensible y tendrá menos errores.
  • Convención sobre configuración: Rails tiene opiniones sobre las mejores maneras Haga muchas cosas en una aplicación web y establezca estas convenciones de forma predeterminada, en lugar de obligarlo a modificar numerosos archivos de configuración.

Creando un nuevo proyecto de rieles

La mejor manera de utilizar esta guía es seguirla paso a paso. Todos los pasos son esenciales para ejecutar la aplicación de ejemplo y no se requieren códigos ni pasos adicionales.

Siguiendo este tutorial, creará un proyecto Rails llamado blog, un blog web muy simple. Antes de comenzar a crear una aplicación, debemos asegurarnos de que Rails esté instalado.

Los siguientes ejemplos usan $ para indicar una línea de entrada de terminal en formato tipo UNIX. sistemas operativos ah, aunque se puede configurar de otra manera. Si está utilizando Windows, la línea se verá así c:\source_code>

3.1. Instalación de rieles

Antes de instalar Rails, debe asegurarse de que las dependencias previas requeridas estén instaladas en su sistema. Estos incluyen Ruby y SQLite3.

Abra aplicaciones de línea de comando. En macOS, abra Terminal.app, en Windows, seleccione "Ejecutar" en el menú Inicio y escriba "cmd.exe". Cualquier comando que comience con el signo de dólar $ debe ejecutarse en la línea de comando. Asegúrate de tener instalada la versión actual de Ruby:

$ rubí -v rubí 2.5.0

Rails requiere la instalación de Ruby versión 2.5.0 o posterior. Si el número de versión es menor que este, deberá instalar una nueva copia de Ruby.

Para instalar rápidamente Ruby y Ruby on Rails en un sistema, los usuarios de Windows pueden usar Rails Installer. Se pueden ver métodos de instalación adicionales para la mayoría de los sistemas operativos en ruby-lang.org.

Si está trabajando en Windows, necesita instalar el kit de desarrollo Ruby Installer.

También necesitará una instalación de base de datos SQLite3.

Muchos sistemas operativos populares tipo UNIX se entregan con una versión razonable de SQLite3. En Windows, si instaló Rails usando Rails Installer, ya tiene SQLite instalado. Otros usuarios pueden consultar el sitio web de SQLite3 para obtener instrucciones de instalación. Verifique que esté instalado correctamente y esté contenido en su RUTA:

$sqlite3 --versión

El programa debe informar su versión.

Para instalar Rails, use el comando de instalación de gemas proporcionado por RubyGems:

$ rieles de instalación de gemas

Para comprobar que todo está instalado correctamente, debes hacer lo siguiente:

$rieles --versión

Si dice algo como "Rails 6.0.0", puedes continuar.

3.2. Crear una aplicación de blog

Rails viene con una serie de scripts, llamados generadores, diseñados para facilitar la vida del desarrollador al generar todo lo necesario para comenzar con una tarea específica. Uno de ellos es el Nuevo Generador de Aplicaciones, que le brinda el marco de una aplicación Rails para que no tenga que escribirla usted mismo.

Para usar este generador, abre una terminal, ve a una carpeta donde tengas permiso para crear archivos y escribe:

$rails nuevo blog

Esto creará una aplicación Rails llamada Blog en el directorio del blog e instalará las gemas cuyas dependencias se mencionan en el Gemfile cuando se usa la instalación del paquete.

En usando Windows Subsistema para Linux, existen algunas restricciones en los mensajes. sistema de archivos, lo que indica que las gemas Spring y Listen deben desactivarse, lo que se puede hacer ejecutando Rails New Blog --skip-spring --skip-listen .

Puede ver todas las opciones posibles de línea de comando que acepta el creador de aplicaciones Rails ejecutando Rails new -h.

Una vez que hayas creado la aplicación del blog, ve a su carpeta:

El directorio del blog contiene varios archivos y carpetas generados automáticamente que definen la estructura de una aplicación Rails. La mayor parte del trabajo de este tutorial se realizará en la carpeta de la aplicación, pero por ahora repasemos las funciones de cada carpeta que Rails crea en una nueva aplicación de forma predeterminada:

Archivo/Carpeta Objetivo
aplicación/ Contiene controladores, modelos, vistas, ayudantes, anuncios publicitarios, canales, trabajos y activos de su aplicación. A continuación veremos esta carpeta con más detalle.
papelera/ Contiene scripts de Rails que inician su aplicación y el directorio también puede contener otros scripts que utiliza para configurar, actualizar, implementar o ejecutar.
configuración/ Configuraciones de ruta, base de datos de su aplicación, etc. Esto se trata con más detalle en Configuración de aplicaciones Rails.
config.ru Configuración de rack para los servidores basados ​​en rack utilizados para ejecutar la aplicación. Para obtener más información sobre Rack, visite el sitio web de Rack.
base de datos/ Contiene su esquema de base de datos actual, así como las migraciones de bases de datos.
Archivo de gemas
Archivo de gemas.lock
Estos archivos le permiten especificar qué dependencias de gemas necesita su aplicación Rails. Estos archivos son utilizados por la gema Bundler. Para obtener más información sobre Bundler, visite el sitio web de Bundler.
biblioteca/ Módulos externos para su aplicación.
registro/ Archivos de registro de aplicaciones.
paquete.json Este archivo le permite especificar qué dependencias npm son necesarias para su aplicación Rails. Este archivo es utilizado por Yarn. Para obtener más información sobre Yarn, visite el sitio web de Yarn.
público/ La única carpeta a la que se puede acceder desde el exterior tal como está. Contiene archivos estáticos y activos compilados.
Archivo de rastrillo Este archivo busca y carga tareas que se pueden ejecutar en la línea de comando. Una tarea específica está disponible en todos los componentes de Rails. En lugar de cambiar el Rakefile, puede agregar sus propias tareas agregando archivos al directorio lib/tasks de la aplicación.
LÉAME.md Esta es una guía introductoria a su aplicación. Debe editarse para decirles a los demás qué hace su aplicación, cómo configurarla, etc.
almacenamiento/ Archivos de almacenamiento activo para el servicio de disco. Esto se trata en la guía Descripción general de Active Storage.
prueba/ Pruebas unitarias, accesorios y otros aparatos de prueba. Esto se trata en la guía de aplicaciones de Testing Rails.
tmp/ Archivos temporales (como archivos caché y pid)
proveedor/ Lugar para código de terceros. En una aplicación Rails típica, incluye gemas externas.
.gitignore Este archivo le dice a git qué archivos (explícitamente o por diseño) debe ignorar. Para obtener más información sobre cómo ignorar archivos, consulte GitHub: ignorar archivos.
.versión-ruby Este archivo contiene la versión predeterminada de Ruby.

¡Hola Rails!

Primero, mostremos algo de texto en la pantalla. Para hacer esto, necesita un servidor en ejecución para su aplicación Rails.

4.1. Iniciando el servidor web

De hecho, ya tienes una aplicación Rails funcional. Sin duda, necesita ejecutar un servidor web en su máquina. Esto se puede hacer ejecutando el siguiente comando desde el directorio del blog:

Si está utilizando Windows, debe pasar los scripts de la carpeta bin directamente al intérprete de Ruby, es decir, al servidor Ruby bin\rails.

La compresión de activos de JavaScript requiere un tiempo de ejecución de JavaScript en su sistema y, si no tiene uno, se producirá un error de execjs durante la compresión de activos. Normalmente, macOS y Windows vienen con un tiempo de ejecución de JavaScript instalado. therubyrhino es el tiempo de ejecución recomendado para los usuarios de JRuby y se agrega al Gemfile si la aplicación se genera en JRuby. Puede aprender todo sobre los tiempos de ejecución compatibles en ExecJS.

Esto iniciará Puma, un servidor web distribuido con Rails de forma predeterminada. Para ver la aplicación en acción, abra una ventana del navegador y vaya a http://localhost:3000. Deberías ver la página de información predeterminada de Rails:

Para detener el servidor web, presione Ctrl+C en la terminal donde se está ejecutando. Para verificar que el servidor se ha detenido, debería ver el cursor de la línea de comando nuevamente. Para la mayoría Sistemas tipo UNIX, incluido macOS, este será el signo de dólar $. En modo de desarrollo, Rails generalmente no requiere que se detenga el servidor; Todos los cambios que realice en los archivos son recogidos automáticamente por el servidor.

La página Bienvenido a bordo es una especie de prueba para una nueva aplicación Rails: muestra que sus programas están configurados lo suficientemente correctamente como para mostrar la página.

4.2. Saluda a Rails

Para que Rails diga "Hola", debes crear al menos controlador Y vista(actuación).

La finalidad del responsable del tratamiento es recibir solicitudes específicas para la aplicación. Enrutamiento decide qué controlador recibirá qué solicitudes. A menudo hay más de una ruta para cada controlador y diferentes rutas pueden manejarse de manera diferente acción. El propósito de cada acción es recopilar información para proporcionarla a la vista.

El propósito de la vista es mostrar esta información en un formato legible por humanos. Una distinción importante a tener en cuenta es que el lugar donde se recopila la información es controlador, no una vista. La vista solo debe mostrar esta información. De forma predeterminada, las plantillas de vista están escritas en un lenguaje llamado eRuby (Embedded Ruby), que se convierte mediante un bucle de solicitud de Rails antes de enviarse al usuario.

Para crear un nuevo controlador, debe ejecutar el generador de "controladores" y decirle que desea un controlador llamado "Bienvenido" con una acción llamada "índice", como esta:

$ Rails genera el controlador Índice de bienvenida

Rails creará varios archivos y una ruta.

Crear app/controllers/welcome_controller.rb ruta obtener "bienvenido/index" invocar erb crear app/views/welcome crear app/views/welcome/index.html.erb invocar test_unit crear test/controllers/welcome_controller_test.rb invocar ayudante crear aplicación/ helpers/welcome_helper.rb invocar test_unit invocar activos invocar scss crear aplicación/assets/stylesheets/welcome.scss

Los más importantes son, por supuesto, el controlador, ubicado en app/controllers/welcome_controller.rb, y la vista, ubicada en app/views/welcome/index.html.erb.

Abra el archivo app/views/welcome/index.html.erb en un editor de texto. Elimine todo el código existente en el archivo y reemplácelo con la siguiente línea de código:

Si envía el formulario nuevamente, verá algo como lo siguiente:

"¡Primer artículo!", "texto"=>"Este es mi primer artículo.") permitido: falso>

Ahora esta acción muestra los parámetros del artículo que proviene del formulario. Sin embargo, sigue siendo inútil. Sí, ves los parámetros, pero en realidad no haces nada con ellos.

5.4. Crear un modelo de artículo

Los modelos en Rails usan un nombre singular y su tabla correspondiente en la base de datos usa un nombre plural. Rails proporciona un generador de modelos que la mayoría de los desarrolladores de Rails utilizan para crear nuevos modelos. Para crear un nuevo modelo, ejecute este comando en su terminal:

$ Rails genera modelo Título del artículo: texto de cadena: texto

Con este comando le decimos a Rails que queremos un modelo de Artículo con el atributo título tipo de cadena y atributo texto tipo de texto. Estos atributos se agregarán automáticamente a la tabla de artículos y se vincularán al modelo de artículo.

Rails responderá creando una serie de archivos. Ahora solo nos interesan app/models/article.rb y db/migrate/20140120191729_create_articles.rb (su nombre puede ser ligeramente diferente). Este último es responsable de crear la estructura de la base de datos, por lo que lo veremos a continuación.

Active Record es lo suficientemente inteligente como para asociar automáticamente los nombres de las columnas con los atributos del modelo, lo que significa que dentro de los modelos Rails no hay necesidad de declarar atributos, Active Record lo hará automáticamente.

5.5. Iniciar una migración

Como ya has visto, Rails genera el modelo creado el archivo. migración de base de datos en el directorio db/migrate. Migraciones es una clase de Ruby diseñada para facilitar la creación y modificación de tablas de bases de datos. Rails usa comandos rake para ejecutar migraciones y es posible deshacer una migración después de que se haya aplicado a su base de datos. El nombre del archivo de migración incluye una marca de tiempo para garantizar que se ejecuten en el orden en que fueron creados.

Si buscas en el archivo db/migrate/YYYYMMDDHHMMSS_create_articles.rb (recuerda, tu archivo tiene un nombre ligeramente diferente), esto es lo que encontrarás allí:

Clase CrearArtículos< ActiveRecord::Migration def change create_table:articles do |t| t.string:title t.text:text t.timestamps end end end

Esta migración crea un método de cambio que se llama cuando se ejecuta esta migración. Las acciones definidas en esta migración también son reversibles, lo que significa que Rails sabe cómo deshacer los cambios realizados por esta migración en caso de que decidas deshacerlos más adelante. Cuando ejecute esta migración, creará una tabla de artículos con una columna de cadena y una columna de texto. También creará dos campos de marca de tiempo para realizar un seguimiento de cuándo se creó y actualizó el artículo.

Ahora necesitamos usar el comando Rails para iniciar la migración:

$ carriles db:migrar

Rails ejecutará este comando de migración e informará que ha creado la tabla de artículos.

CreateArticles: migrar ================================================ === -- create_table(:articles) -> 0.0019s == CreateArticles: migrado (0.0020s) ============================ ===============

Dado que está ejecutando en el entorno de desarrollo de forma predeterminada, este comando se aplicará a la base de datos definida en la sección de desarrollo de su archivo config/database.yml. Si desea realizar migraciones en otro entorno, como producción, debe pasarlo explícitamente al llamar al comando: rails db:migrate RAILS_ENV=production.

5.6. Guardar datos en el controlador

Volviendo al ArticleController, necesitamos cambiar la acción de creación para usar el nuevo modelo de artículo para guardar datos en la base de datos. Abra app/controllers/articles_controller.rb y cambie la acción de creación para que se vea así:

Def crear @artículo = Artículo.nuevo(params[:artículo]) @artículo.save redirección_to @artículo final

Esto es lo que sucede aquí: cada modelo de Rails se puede inicializar con los atributos apropiados, que se vincularán automáticamente a las columnas correspondientes de la base de datos. En la primera línea hacemos precisamente eso (recuerde que params[:article] contiene los atributos que nos interesan). @article.save es entonces responsable de guardar el modelo en la base de datos. Finalmente redirigimos al usuario a la acción mostrar, que definiremos más adelante.

Quizás se pregunte por qué la A en Article.new está en mayúscula cuando todos los demás enlaces de artículos de esta guía están en mayúscula. En este contexto, nos referimos a una clase llamada Artículo, que se define en app/models/article.rb. Los nombres de clases en Ruby deben comenzar con letra mayúscula.

Ahora que hay validaciones, llamar a @article.save en un artículo no válido devolverá false. Si abre app/controllers/articles_controller.rb nuevamente, verá que no estamos verificando el resultado de la llamada @article.save en la acción de creación. Si @article.save falla en esta situación, debemos mostrar el formulario al usuario nuevamente. Para hacer esto, reemplace las acciones nuevas y creadas en app/controllers/articles_controller.rb con estas:

Def nuevo @artículo = Artículo.nuevo fin def crear @artículo = Artículo.nuevo(artículo_params) si @artículo.save redirigir_to @artículo de lo contrario renderiza "nuevo" fin fin privado def artículo_params params.require(:artículo).permit(:título , :texto) fin

La nueva acción ahora crea una nueva variable de instancia llamada @article y verás por qué en un par de párrafos.

Tenga en cuenta que en la acción de creación utilizamos render en lugar de redirigir_to cuando guardar devuelve falso. El método de renderizado se utiliza para garantizar que el objeto @article se devuelva a la nueva plantilla cuando se renderice. Esta representación se realiza dentro de la misma solicitud que el envío del formulario, mientras que redirigir_to le dice al navegador que realice una solicitud diferente.

5.11. Actualizaciones de artículos

Hemos ampliado la parte "CR" de CRUD. Ahora centrémonos en la parte "U", la actualización de artículos.

El primer paso es agregar una acción de edición al ArticlesController, generalmente entre las acciones nueva y crear, como se muestra.

Def nuevo @artículo = Artículo.nuevo fin def editar @artículo = Artículo.find(params[:id]) fin def crear @artículo = Artículo.nuevo(artículo_params) si @artículo.save redirigir_to @artículo de lo contrario renderizar "nuevo" fin fin

La vista contendrá un formulario similar al que usamos al crear nuevos artículos. Cree un archivo llamado app/views/articles/edit.html.erb y agréguele lo siguiente:

Editando artículo

<%= form_with(model: @article, local: true) do |form| %> <% if @article.errors.any? %>

<%= pluralize(@article.errors.count, "error") %>

    <% @article.errors.full_messages.each do |msg| %>
  • <%= msg %>
  • <% end %>
<% end %>

<%= form.label:title %>
<%= form.text_field:title %>

<%= form.label:text %>
<%= form.text_area:text %>

<%= form.submit %>

<% end %> <%= link_to "Back", articles_path %>

En este momento estamos apuntando el formulario a una acción de actualización, que aún no se ha definido, pero lo haremos pronto.

Pasar el objeto del artículo al método form_with configurará automáticamente la URL para enviar el formulario del artículo editado. Esta opción le dice a Rails que queremos que este formulario se envíe usando PATCH, un método HTTP que se espera que se use para actualizaciones recursos de acuerdo con el protocolo REST.

Luego necesitas crear una acción de actualización en app/controllers/articles_controller.rb. Agréguelo entre la acción de creación y el método privado:

Def crear @artículo = Artículo.nuevo(artículo_params) si @artículo.save redirigir_to @artículo más renderizar "nuevo" fin fin def actualizar @artículo = Artículo.find(params[:id]) si @artículo.update(artículo_params) redirigir_to @artículo más renderizar "editar" fin fin privado def artículo_params params.require(:artículo).permit(:título, :texto) fin

El nuevo método, actualizar, se utiliza cuando desea actualizar un registro que ya existe y requiere un hash que contiene los atributos que desea actualizar. Como antes, si hay un error al actualizar el artículo, queremos mostrar el formulario al usuario nuevamente.

Reutilizamos el métodoarticle_params que definimos anteriormente para la acción de creación.

No es necesario pasar todos los atributos para actualizar. Por ejemplo, si se llamó a @article.update(title: "Un nuevo título"), Rails actualizará solo el atributo del título, dejando todos los demás atributos intactos.

<% @articles.each do |article| %> <% end %>
Título Texto
<%= article.title %> <%= article.text %> <%= link_to "Show", article_path(article) %> <%= link_to "Edit", edit_article_path(article) %>

Y también agregaremos app/views/articles/show.html.erb a la plantilla para que el enlace "Editar" también esté en la página del artículo. Agregue lo siguiente al final de la plantilla:

... <%= link_to "Edit", edit_article_path(@article) %> | <%= link_to "Back", articles_path %>

Y así es como se ve nuestra aplicación ahora:

5.12. Usar parciales para limpiar la repetición en las vistas

Nuestra página de edición es muy similar a la página nueva; de hecho, usan el mismo código para mostrar el formulario. Eliminemos esta duplicación usando una vista parcial. Por convención, los archivos parciales comienzan con un guión bajo.

Cree un nuevo archivo app/views/articles/_form.html.erb con el siguiente contenido:

<%= form_with model: @article, local: true do |form| %> <% if @article.errors.any? %>

<%= pluralize(@article.errors.count, "error") %>prohibió que se guardara este artículo:

    <% @article.errors.full_messages.each do |msg| %>
  • <%= msg %>
  • <% end %>
<% end %>

<%= form.label:title %>
<%= form.text_field:title %>

<%= form.label:text %>
<%= form.text_area:text %>

<%= form.submit %>

<% end %>

Ahora actualicemos la vista app/views/articles/new.html.erb para usar este nuevo parcial reescribiéndolo por completo:

Articulo nuevo

<%= render "form" %> <%= link_to "Back", articles_path %>

Y lo mismo para la aplicación de vista/views/articles/edit.html.erb:

Editar artículo

<%= render "form" %> <%= link_to "Back", articles_path %>

5.13. Eliminar artículos

Ahora estamos listos para cubrir la parte "D" de CRUD, eliminando de la base de datos. Siguiendo la convención REST, la ruta para eliminar artículos en la salida de rutas de rieles es la siguiente:

BORRAR /artículos/:id(.:formato) artículos#destruir

El método de eliminación de enrutamiento debe usarse para rutas que destruyen recursos. Si se dejara como una ruta de obtención normal, sería posible crear las siguientes URL maliciosas:

¡Mira este gato!

Usamos el método de eliminación para destruir recursos, y esta ruta está asociada con la acción de destrucción en app/controllers/articles_controller.rb, que aún no existe. El método de destrucción suele ser la última acción CRUD en un controlador y, al igual que otras acciones CRUD públicas, debe colocarse antes de cualquier método privado o protegido. Agregémoslo:

Def destruir @artículo = Artículo.find(params[:id]) @artículo.destroy redirigir_al final de la ruta_artículos

Todo el ArticlesController en el archivo app/controllers/articles_controller.rb ahora debería verse así:

Artículos de claseControlador< ApplicationController def index @articles = Article.all end def show @article = Article.find(params[:id]) end def new @article = Article.new end def edit @article = Article.find(params[:id]) end def create @article = Article.new(article_params) if @article.save redirect_to @article else render "new" end end def update @article = Article.find(params[:id]) if @article.update(article_params) redirect_to @article else render "edit" end end def destroy @article = Article.find(params[:id]) @article.destroy redirect_to articles_path end private def article_params params.require(:article).permit(:title, :text) end end

Puede llamar a destruir objetos de Active Record cuando desee eliminarlos de la base de datos. Tenga en cuenta que no necesitamos agregar una vista para esta acción ya que estamos redirigiendo a la acción de índice.

Listado de artículos

<%= link_to "New article", new_article_path %> <% @articles.each do |article| %> <% end %>
Título Texto
<%= article.title %> <%= article.text %> <%= link_to "Show", article_path(article) %> <%= link_to "Edit", edit_article_path(article) %> <%= link_to "Destroy", article_path(article), method: :delete, data: { confirm: "Are you sure?" } %>

Aquí usamos link_to de una manera diferente. Pasamos la ruta nombrada como segundo argumento y las opciones como otro argumento. El método: eliminar y datos: (confirmar: "¿Estás seguro?") Las opciones se utilizan como atributos html5, por lo que cuando se hace clic en un enlace, Rails primero mostrará al usuario un cuadro de diálogo de confirmación y luego enviará el enlace utilizando el método de eliminación. . Esto se hace utilizando el archivo JavaScript Rails-ujs, que se incluye automáticamente en el diseño de la aplicación (app/views/layouts/application.html.erb) cuando se genera la aplicación. Sin este archivo, no se mostrará el cuadro de diálogo de confirmación.

Felicitaciones, ahora puede crear, ver todos e individualmente, actualizar y destruir artículos.

Agregar un segundo modelo

Es hora de agregar un segundo modelo a la aplicación. El segundo modelo procesará comentarios sobre artículos.

6.1. Generando el modelo

Tenemos la intención de utilizar el mismo generador que utilizamos anteriormente al crear el modelo de artículo. Esta vez crearemos un modelo de comentario que contiene un enlace al artículo. Ejecute el siguiente comando en una terminal:

$ rieles generan modelo Comentario comentarista:cuerpo de cadena:artículo de texto:referencias

Este comando genera cuatro archivos:

Primero, echemos un vistazo a app/models/comment.rb:

Comentario de clase< ApplicationRecord belongs_to:article end

Esto es muy similar al modelo de artículo que vimos anteriormente. La diferencia está en la línea pertenece_a:artículo, que establece conexión Registro activo. Aprenderá sobre las conexiones en la siguiente sección de la guía.

La palabra clave (:references) utilizada en el comando bash es un tipo de datos especial para modelos. Él crea nueva columna en su base de datos con el nombre del modelo representado con un _id adjunto que puede contener valores numéricos. Para comprender mejor, analice el archivo db/schema.rb después de realizar la migración.

Además del modelo, Rails también realizó una migración para crear la tabla de base de datos correspondiente:

Clase CrearComentarios< ActiveRecord::Migration def change create_table:comments do |t| t.string:commenter t.text:body t.references:article, null: false, foreign_key: true t.timestamps end end end

La línea t.references crea una columna numérica llamada Article_id, un índice en ella y una restricción de clave externa que apunta a la columna id de la tabla de artículos. A continuación, iniciamos la migración:

$ carriles db:migrar

Rails es lo suficientemente inteligente como para ejecutar solo migraciones que aún no se han ejecutado en la base de datos actual; en nuestro caso verás:

CreateComments: migrando ================================================= == -- create_table(:comments) -> 0.0115s == CreateComments: migrado (0.0119s) ============================== =============

6.2. Conectando modelos

Las relaciones de Active Record le permiten declarar fácilmente relaciones entre dos modelos. En el caso de comentarios y artículos, podría describir la relación de la siguiente manera:

  • Cada comentario pertenece a un artículo.
  • Un artículo puede tener muchos comentarios.

De hecho, es muy parecida a la sintaxis que usa Rails para declarar esta conexión. Ya has visto la línea de código en el modelo de comentarios (app/models/comment.rb) que hace que cada comentario pertenezca a un artículo:

Comentario de clase< ApplicationRecord belongs_to:article end

Debes editar app/models/article.rb para agregar el otro lado del enlace:

Artículo de clase< ApplicationRecord has_many:comments validates:title, presence: true, length: { minimum: 5 } [...] end

Estos dos anuncios ponen automáticamente a disposición un gran número de posibilidades. Por ejemplo, si tiene una variable de instancia @article que contiene un artículo, puede obtener todos los comentarios que pertenecen a ese artículo en una matriz llamando a @article.comments.

6.3. Agregar una ruta para comentarios

Al igual que con el controlador de bienvenida, necesitamos agregar una ruta para que Rails sepa a qué dirección queremos ir para ver los comentarios. Abra el archivo config/routes.rb nuevamente y edítelo de la siguiente manera:

Recursos: los artículos hacen recursos: los comentarios terminan

Esto creará comentarios como recurso anidado en artículos. Esta es la otra cara de la captura de las relaciones jerárquicas que existen entre artículos y comentarios.

6.4. Generando un controlador

Teniendo el modelo, dirijamos nuestra atención a crear el controlador apropiado. Usaremos nuevamente el mismo generador que usamos antes:

$ Rails genera comentarios del controlador

Se crearán cuatro archivos y un directorio vacío:

Como cualquier otro blog, nuestros lectores crearán sus comentarios inmediatamente después de leer el artículo y, después de agregar un comentario, serán dirigidos nuevamente a la página de visualización del artículo y verán que su comentario ya se ha reflejado. En este sentido, nuestro CommentsController sirve como medio para crear comentarios y eliminar spam, si lo hubiera.

Primero, ampliaremos la plantilla de presentación de artículos (app/views/articles/show.html.erb) para permitir que se agregue un nuevo comentario:

Título: <%= @article.title %>

Texto: <%= @article.text %>

Añadir un comentario:

<%= form_with(model: [ @article, @article.comments.build ], local: true) do |form| %>

<%= form.label:commenter %>
<%= form.text_field:commenter %>

<%= form.label:body %>
<%= form.text_area:body %>

<%= form.submit %>

<% end %> <%= link_to "Edit", edit_article_path(@article) %> | <%= link_to "Back", articles_path %>

Esto agregará un formulario a la página de visualización del artículo que crea un nuevo comentario cuando se llama a la acción de creación en CommentsController. Aquí la llamada form_with utiliza una matriz, que creará una ruta anidada como /articles/1/comments .

Escribamos crear en app/controllers/comments_controller.rb:

Comentarios de claseControlador< ApplicationController def create @article = Article.find(params[:article_id]) @comment = @article.comments.create(comment_params) redirect_to article_path(@article) end private def comment_params params.require(:comment).permit(:commenter, :body) end end

Es un poco más complicado de lo que viste en el artículo del controlador. Este es un efecto secundario del archivo adjunto que configuró. Cada solicitud de comentario realiza un seguimiento del artículo al que se adjunta el comentario, por lo que primero resolvemos el problema de recuperar el artículo llamando a buscar en el modelo Artículo.

Además, el código aprovecha algunos de los métodos disponibles para las conexiones. Usamos el método de creación en @article.comments para crear y guardar un comentario. Esto vincula automáticamente el comentario para que pertenezca a un artículo específico.

Una vez que hemos creado un nuevo comentario, llevamos al usuario de regreso al artículo original usando el asistente Article_path(@article). Como ya hemos visto, llama a la acción show en ArticlesController, que a su vez representa la plantilla show.html.erb. Aquí es donde queremos mostrar los comentarios, así que agreguemos lo siguiente a app/views/articles/show.html.erb.

Título: <%= @article.title %>

Texto: <%= @article.text %>

Comentarios

<% @article.comments.each do |comment| %>

Comentarista: <%= comment.commenter %>

Comentario: <%= comment.body %>

<% end %>

Añadir un comentario:

<%= form_with(model: [ @article, @article.comments.build ], local: true) do |form| %>

<%= form.label:commenter %>
<%= form.text_field:commenter %>

<%= form.label:body %>
<%= form.text_area:body %>

<%= form.submit %>

<% end %> <%= link_to "Edit", edit_article_path(@article) %> | <%= link_to "Back", articles_path %>

Ahora puedes agregar artículos y comentarios a tu blog y mostrarlos en los lugares correctos.

Refactorización

Ahora que tenemos artículos y comentarios en funcionamiento, echemos un vistazo a la plantilla app/views/articles/show.html.erb. Se volvió largo e incómodo. Usemos parciales para aliviarlo.

7.1. Representación de colecciones de parciales

Primero, haremos un comentario parcial que muestre todos los comentarios de un artículo. Cree un archivo app/views/comments/_comment.html.erb y coloque lo siguiente en él:

Comentarista: <%= comment.commenter %>

Comentario: <%= comment.body %>

Luego puedes cambiar app/views/articles/show.html.erb así:

Título: <%= @article.title %>

Texto: <%= @article.text %>

Comentarios

<%= render @article.comments %>

Añadir un comentario:

<%= form_with(model: [ @article, @article.comments.build ], local: true) do |form| %>

<%= form.label:commenter %>
<%= form.text_field:commenter %>

<%= form.label:body %>
<%= form.text_area:body %>

<%= form.submit %>

<% end %> <%= link_to "Edit", edit_article_path(@article) %> | <%= link_to "Back", articles_path %>

Esto ahora mostrará app/views/comments/_comment.html.erb parcial una vez para cada comentario en la colección @article.comments. Dado que el método render recorre en iteración la colección @article.comments, asigna cada comentario a una variable local denominada parcial, en este caso comentario, que está disponible para nosotros en el parcial para su visualización.

7.2. Representar un formulario en forma parcial

Movamos también la nueva sección de comentarios a nuestro parcial. Nuevamente, cree un archivo app/views/comments/_form.html.erb que contenga:

<%= form_with(model: [ @article, @article.comments.build ], local: true) do |form| %>

<%= form.label:commenter %>
<%= form.text_field:commenter %>

<%= form.label:body %>
<%= form.text_area:body %>

<%= form.submit %>

<% end %>

Luego cambie app/views/articles/show.html.erb así:

Título: <%= @article.title %>

Texto: <%= @article.text %>

Comentarios

<%= render @article.comments %>

Añadir un comentario:

<%= render "comments/form" %> <%= link_to "Edit", edit_article_path(@article) %> | <%= link_to "Back", articles_path %>

El segundo renderizado simplemente define la plantilla parcial que queremos renderizar, comentarios/formulario. Rails es lo suficientemente inteligente como para poner un guión bajo en esta línea y comprender que deseaba representar el archivo _form.html.erb en el directorio app/views/comments.

El objeto @article está disponible en cualquier parcial representado en la vista, ya que lo definimos como una variable de instancia.

Eliminar comentarios

Otra característica importante del blog es la posibilidad de eliminar spam. Para hacer esto, necesita insertar algún enlace en la vista y una acción de destrucción en CommentsController.

Comentarista: <%= comment.commenter %>

Comentario: <%= comment.body %>

<%= link_to "Destroy Comment", , method: :delete, data: { confirm: "Are you sure?" } %>

Presionando esto nuevo enlace"Destruir comentario" ejecutará DELETE /articles/:article_id/comments/:id en nuestro CommentsController, que luego se usará para encontrar el comentario que queremos eliminar, así que agreguemos una acción de destrucción a nuestro controlador (app/controllers/comments_controller .rb):

Comentarios de claseControlador< ApplicationController def create @article = Article.find(params[:article_id]) @comment = @article.comments.create(comment_params) redirect_to article_path(@article) end def destroy @article = Article.find(params[:article_id]) @comment = @article.comments.find(params[:id]) @comment.destroy redirect_to article_path(@article) end private def comment_params params.require(:comment).permit(:commenter, :body) end end

La acción de destrucción encontrará el artículo que estamos viendo, buscará el comentario en la colección @article.comments y luego lo eliminará de la base de datos y nos devolverá a ver el artículo.

8.1. Eliminar objetos relacionados

Si eliminas un artículo, también se deben eliminar los comentarios asociados a él, de lo contrario simplemente ocuparán espacio en la base de datos. Rails le permite utilizar la opción dependiente en un enlace para lograr esto. Modifique el modelo de artículo, app/models/article.rb, de la siguiente manera:

Artículo de clase< ApplicationRecord has_many:comments, dependent: :destroy validates:title, presence: true, length: { minimum: 5 } [...] end

Seguridad

9.1. Autenticación básica

Si publica su blog en línea, cualquiera puede agregar, editar y eliminar artículos o eliminar comentarios.

Rails proporciona un sistema de autenticación HTTP básico que funciona bien en esta situación.

En ArticlesController necesitamos una forma de bloquear el acceso a varias acciones si el usuario no está autenticado. Aquí podemos usar el método Rails http_basic_authenticate_with para permitir el acceso a las acciones requeridas, si el método lo permite.

Para usar el sistema de autenticación, lo definiremos en la parte superior de nuestro ArticleController en app/controllers/articles_controller.rb. En nuestro caso, queremos que el usuario esté autenticado para cada acción excepto index y show, así que lo escribiremos así:

Artículos de claseControlador< ApplicationController http_basic_authenticate_with name: "dhh", password: "secret", except: [:index, :show] def index @articles = Article.all end # пропущено для краткости

También queremos permitir que solo los usuarios autenticados eliminen comentarios, por lo que en CommentsController (app/controllers/comments_controller.rb) escribiremos:

Comentarios de claseControlador< ApplicationController http_basic_authenticate_with name: "dhh", password: "secret", only: :destroy def create @article = Article.find(params[:article_id]) # ... end # пропущено для краткости

Ahora, si intenta crear un artículo nuevo, encontrará una llamada de autenticación básica HTTP:

También hay otros métodos de autenticación disponibles para aplicaciones Rails. Dos complementos populares para Rails son Devise y Authlogic, entre otros.

9.2. Otras reflexiones sobre la seguridad

La seguridad, especialmente en aplicaciones web, es un área amplia y detallada. La seguridad de su aplicación Rails se trata con más detalle en la guía Seguridad de las aplicaciones Rails. La forma más sencilla de trabajar con Rails es almacenar todos los datos externos en UTF-8. De lo contrario, las bibliotecas Ruby y Rails a menudo podrán convertir sus datos nativos a UTF-8, pero esto no siempre funciona de manera confiable, por lo que es mejor asegurarse de que todos los datos externos sean UTF-8.

Si comete un error en esta área, el síntoma más común es que aparezca en el navegador un diamante negro con un signo de interrogación en su interior. Otro síntoma común es la aparición de símbolos como "ü" en lugar de "ü". Rails toma una serie de medidas internas para mitigar casos comunes de problemas que pueden detectarse y corregirse automáticamente. Sin embargo, si hay datos externos que no están almacenados en UTF-8, esto puede provocar este tipo de problemas que Rails no puede detectar ni solucionar automáticamente.

Las dos fuentes de datos más comunes que no están en UTF-8 son:

  • Su editor de texto: La mayoría de los editores de texto (como TextMate) guardan archivos como UTF-8 de forma predeterminada. Si su editor de texto no hace esto, puede causar que los caracteres especiales ingresados ​​en sus patrones (como é) aparezcan como un diamante con un signo de interrogación en el navegador. Esto también se aplica a sus archivos de traducción i18N. La mayoría de los editores que no utilizan UTF-8 de forma predeterminada (como algunas versiones de Dreamweaver) ofrecen una forma de cambiar el valor predeterminado a UTF-8. Hacer esto.
  • Su base de datos: Rails convierte de forma predeterminada los datos de su base de datos a UTF-8 en el borde. Sin embargo, si su base de datos no utiliza UTF-8 internamente, es posible que no pueda almacenar todos los caracteres que ingresará su usuario. Por ejemplo, si su base de datos utiliza Latin-1 internamente y su usuario ingresa caracteres rusos, hebreos o japoneses, los datos se perderán tan pronto como ingresen a la base de datos. Si es posible, utilice UTF-8 como almacenamiento interno en su base de datos.

Muchos de mis amigos desarrolladores hablaban muy bien de Rails, pero no podía entender por qué. ¿Qué es Rails y en qué se diferencia de Ruby on Rails? ¿Qué tan difícil es aprender? ¿Es esto siquiera un lenguaje de programación? ¿Qué necesito saber antes de aprender Ruby on Rails?

Estas y muchas otras preguntas daban vueltas constantemente en mi cabeza, pero resultó que no era el único. Nuestros lectores también estaban interesados ​​en este tema, así que para saber más al respecto, decidí hacerle a uno de mis colegas algunas preguntas básicas sobre Ruby. Así nació este artículo.

¿Estas listo? ¡Ir!

13 datos sobre Ruby on Rails: ¿lo que necesitas saber?

1. ¿Qué son los rieles?

Rails es un marco de aplicaciones web diseñado para escribir código en el lenguaje Ruby. Suena confuso, ¿verdad?

Intentemoslo de nuevo. Existe un lenguaje de programación llamado Ruby. Es un placer escribir sobre él. Por cierto, la persona que lo creó dijo que su principal objetivo era crear un lenguaje que mejorara la vida de los programadores. ¿No es esto maravilloso?

Dejame darte un ejemplo.

Si quiero mostrar texto en la pantalla en PHP, necesito escribir

hacer eco de "Hola mundo";

¿Ves el punto y coma? Y este "eco", ¿qué significa?

Por otro lado, si necesitara hacer lo mismo en Ruby, necesitaría escribir lo siguiente:

pone "Hola mundo"

No hay punto y coma, y ​​si bien "puts" puede parecer un poco juvenil, para mí tiene más sentido que "echo". Cuando pasas horas escribiendo código, pequeños detalles como este marcan una GRAN diferencia.

El único problema con Ruby fue que no fue diseñado para crear aplicaciones web. Es decir, no podrás, por ejemplo, crear un sitio web en él. Este fue el caso antes de Rails. No estoy seguro de si Rails fue el primer framework web para Ruby, pero DEFINITIVAMENTE se convirtió en el más popular.

El propósito de Rails es proporcionar una plataforma y capacidades que le permitan crear aplicaciones, en particular un sitio web, en Ruby. Suena bastante vago en este momento, así que intentaré explicarlo así. si escribiera

pone "Hola mundo"

luego, en el documento HTML, verá el texto completo. Pero quiero que veas SÓLO esto:

Hola Mundo

En pocas palabras, Rails te permite hacer esto. Pero eso no es todo.

2. ¿Qué es Ruby on Rails?

Ruby on Rails es el nombre oficial COMPLETO del marco Rails. Pero en una conversación, los desarrolladores normalmente no dicen la primera parte y simplemente la llaman Rails. Entonces, si quieres estar "activo" y parecer un experto en tecnología, definitivamente deberías llamarlo Rails, pero RECUERDA lo que significa la primera parte, "Ruby activado".

3. He oído que Rails es fantástico para principiantes. ¿Por qué?

Hay varias razones por las que Rails es ideal para principiantes. La primera es que el lenguaje Ruby en sí es realmente bueno para principiantes, y esta es la primera ventaja. Aprender a codificar en Ruby es mucho más fácil que en otros lenguajes, ya que el lenguaje es bastante flexible y liberal, lo que te ahorrará los nervios y te permitirá dedicar más tiempo a aprender los conceptos básicos de programación.

¿Por qué Rails es tan divertido para los principiantes? Es simplemente muy estable y hace una GRAN cantidad de trabajo por ti.

Para mí, trabajar en Rails es como conducir un camión. Es increíblemente poderoso, solo mírate: ¡¡¡estás conduciendo un camión!!! Sin embargo, ¿qué tan bien sabes cómo funciona el auto que conduces?

El hecho de que Rails se encargue de muchas más tareas, haciéndolas por usted, le permitirá disfrutar de muchos beneficios interesantes de inmediato. Sin embargo, a veces esto también puede jugar en tu contra si a veces te adelantas y no aprendes completamente los conceptos básicos que simplemente debes saber.

Por este motivo, es muy importante aprender Ruby on Rails desde cero. Y lo más importante, debe asegurarse de sentirse realmente cómodo trabajando con Ruby. De lo contrario, simplemente te bajarás del camión a mitad de camino y te dirás: "Espera, ¿realmente estaba conduciendo esta cosa?".

4. ¿Cuál es la diferencia entre un desarrollador Rails y un desarrollador Ruby?

Formalmente, la diferencia es que un “desarrollador Ruby” puro creará aplicaciones en Ruby, pero no en Rails. Aunque esto, por regla general, no sucede. Ciertamente es posible crear aplicaciones web en Ruby utilizando otros marcos como Sinatra, pero estoy dispuesto a apostar que el 99% de las veces es poco probable que te contraten como programador exclusivo de Ruby. Por lo tanto, es necesario aprender Rails en cualquier caso.

5. ¿Qué tan bien debería conocer a Ruby? ¿Qué debo aprender antes de comenzar mi formación?

Las opiniones varían sobre esto, pero siguiendo con el ejemplo del camión grande, creo que debes sentirte cómodo con Ruby para profundizar en Rails. Al igual que, digamos, es mejor aprender primero a andar en bicicleta antes de cambiar a un automóvil y luego pensar en conducir un camión.

Y aquí hay otra cosa. Cuando se trabaja en Rails, se dedica mucho tiempo a escribir código en Ruby. Por esta razón, es necesario conocer muy bien este lenguaje, especialmente sus conceptos básicos: tipos de datos, métodos, orientación a objetos, depuración y mucho más. Y no es necesario ser un programador de Ruby con mucha experiencia; solo necesita sentirse seguro al trabajar con él, como un pato en el agua.

6. ¿Por qué debería aprender Rails? ¿Qué lo hace especial?

Es exquisito y simplemente impresionante. ¿Qué más necesitas saber? Cuando Rails apareció por primera vez, se convirtió en un verdadero descubrimiento y logro del arte del diseño. Teniendo en cuenta las mejores prácticas cuando se creó, Rails prácticamente te encamina hacia la escritura de código excelente, incluso cuando no quieras (o no sepas cómo hacerlo).

Si desea crear aplicaciones web sólidas que crezcan según sea necesario y que sean fáciles de mantener en el futuro, Rails es una excelente opción. Además, es popular entre muchas empresas interesantes. La última gran razón por la que Rails es tan popular entre las nuevas empresas es que es excelente para la creación rápida de prototipos. En tan solo unas horas podrás imaginar, crear y ejecutar la aplicación Rails que necesitas. En realidad, existen muy pocos otros marcos que puedan manejar esto.

7. ¿Qué puedes crear con Rails?

¿Qué quieres crear? Rails es adecuado para cualquier aplicación web. Para ilustrarlo, consulte estos fantásticos ejemplos de sitios creados con Rails: Hulu, Airbnb y Basecamp.

8. ¿Puedo crear aplicaciones móviles usando Rails?

Si y no. No podrás crear aplicaciones móviles con Rails, pero con Rails definitivamente puedes crear una aplicación web y usarla como back-end para aplicación movil.

También hay una herramienta llamada RubyMotion que hace que sea muy fácil crear aplicaciones nativas para iOS y Android en Ruby (pero no en Rails). Es decir, no usarás ESPECÍFICAMENTE Rails para crear una aplicación móvil para la App Store, pero Rails definitivamente puede ser un componente importante de tu proyecto móvil. Espero que el panorama sea ahora más claro.

9. Ruby on Rails: ¿Qué tipo de trabajo puedo conseguir?

Rails es una de las habilidades más demandadas hoy en día, por lo que hay muchas empresas entre las que elegir para trabajar. Las empresas emergentes, como Zearn, adoran especialmente Rails. Esta es una nueva empresa de TI educativa sin fines de lucro. También puede elegir una empresa más grande como Bloomberg y participar en el desarrollo de sitios y aplicaciones que utilizan millones de usuarios. Trabajar como autónomo también es una buena opción para los desarrolladores de Rails. Al ser independiente podrás elegir en qué proyectos quieres participar: pequeños y de corto plazo o serios y de largo plazo.

10. Probé otro lenguaje de programación, pero no me gustó. ¿Debería probar Rails?

Quiero enfatizar nuevamente: Rails, de hecho, no es un lenguaje de programación, sino un marco. Si alguna vez te has preguntado si tiene algún sentido intentar enamorarte de algún lenguaje de programación, todo lo que puedo decir es que Ruby es el lenguaje de programación más venerado y amado por los usuarios del mundo. Así que no descartaría la programación hasta que hayas probado Ruby.

11. ¿Debería aprender JavaScript junto con Rails?

En cambio, no. Además – SIN DUDA.

Un desarrollador de Rails deberá aprender JavaScript(). Este no es un requisito para aprender Rails, pero es una habilidad que necesitará a medida que aprenda.

Seamos honestos, a medida que profundices gradualmente en el campo de la tecnología, comenzarás a darte cuenta de que tendrás que tener bastantes habilidades (básicamente, esto significa que todos deben esforzarse por ser un desarrollador Full-Stack). Afortunadamente, a medida que adquieras experiencia, te resultará más fácil aprender nuevos lenguajes y nuevos marcos.

En cuanto a elegir JavaScript o Rails, te diré directamente que no puedes equivocarte de ninguna manera. Considero que Ruby es mucho más fácil de aprender que JavaScript. Además, conozco a muchas personas a las que les resultó más fácil JavaScript después de aprender Ruby. Pero, como dije anteriormente, definitivamente no puedes equivocarte si estudias ambos.

12. ¿Cuánto tiempo durará la formación?

¿Cuánto tiempo al día tendrás que dedicar a estudiar? Creo que una buena comprensión de Rails requiere varios meses de formación dedicada. Pero como cualquier otra habilidad, necesitarás decenas de miles de horas para convertirte en un profesional de Rails, por lo que es mejor empezar ahora.

Tu velocidad de aprendizaje estará muy influenciada por tu nivel de conocimiento en el campo de la programación en general. Pero si eres un completo principiante, vale la pena intentar comenzar con Ruby y Rails.

13. Ruby on Rails: ¿por dónde empezar?

Recomiendo comenzar con el mejor curso de Ruby on Rails disponible en la actualidad. Si no has escrito una línea de código en tu vida, lo primero que debes hacer es realizar el curso de HTML y CSS. Afortunadamente, es bastante fácil encontrar cursos sobre HTML y CSS. Después de eso, necesitarás aprender Ruby, Git y la línea de comandos.

El programa de formación normalmente le presentará Rails de forma gradual y le mostrará cómo trabajar con Sinatra y ActiveRecord. Esto no te dice nada todavía, pero el punto es que antes de conducir ese "camión" que mencioné antes, debes comenzar con algunos cursos sencillos de conducción de Rails.

Lo mejor que puedes hacer al estudiar es crear tu propio proyecto, trabajar en algo y desarrollarlo, saber que estás avanzando en la dirección correcta y, además, ¡tener un buen apoyo! Durante el proceso de aprendizaje, tendrás millones de pequeñas preguntas y para lograrlo mejor resultado Es importante que tengas a alguien que pueda ayudarte a resolverlo y darte algunos consejos si surgen dificultades.

Alexander es el fundador del proyecto del sitio web "Laboratorio Web del Éxito", creado para apoyar a los emprendedores de Internet principiantes y continuados. Es un adicto al trabajo convencido con experiencia profesional en la gestión de la oficina editorial de una revista en línea, creando y administrando su propia tienda en línea. Ocupación principal: promoción de negocios (incluidas tiendas online) a través de Facebook y Google Adwords. Hobby principal: monetizar sitios web a través de herramientas de marketing de afiliados y publicidad de Google. Registros personales confirmados: 3 millones de visitantes al blog por mes.

El autor se vio impulsado a escribir este texto estudiando una serie de cosas que se encuentran en Red global materiales que bien podrían designarse bajo el mismo título/etiqueta: Como aprendí Ruby(o Ruby on Rails, PHP, JS, C++, etc.) por tres días.

O algo así. El autor, a su vez, inmediatamente recordó (asociaciones incontrolables) una serie de anécdotas, unidas nuevamente por un tema común, que consiste en la caracterización evaluativa de acciones que pueden realizarse tontamente... la lengua rusa es poderosa e increíblemente aforística, pero Lamentablemente, no parece posible citar aquí estas obras maestras; En consecuencia, no queda más que ofrecer a la atención del lector una versión escrita personalmente del documento de la serie. Cómo aprender a trabajar en Ruby on Rails con mucho gusto y relativamente rápido.

Siempre se puede encontrar un ejemplo funcional del código descrito en el artículo, entre otros ejemplos de Rails, en el blog de prueba del autor en herokuapp.com, bienvenido.

La técnica es sencilla, y el autor no reclama aquí en absoluto los laureles de descubridor: es necesario que sea interesante y los resultados no harán esperar. No está de más intentar jugar con las propias debilidades, porque a veces la vanidad puede ser beneficiosa para la causa; los resultados del desarrollo deben ser tales que puedan presentarse con orgullo a lectores, amigos y colegas en Internet, implementarse en algún lugar de héroeku o Amazonas, además, para que podamos volver a ellos una y otra vez, reconstruyendo y mejorando, los foros y StackOwerflow nos ayudan a todos. Entonces digo, ¿por qué no escribir, primero, tu blog en Ruby on Rails?

Sugiero comenzar con el excelente expediente Getting Started with Rails o su adaptación en ruso de Rails para principiantes, también crear un blog con Ruby on Rails, y los materiales de este blog, cuyos enlaces se encuentran fácilmente en la barra lateral izquierda, pueden también ayuda. Y luego - eso es todo, entonces magia, al principio todo está dispuesto como si fuera notas, abre la consola - y adelante... el autor considera que es su deber hacer solo algunas explicaciones y recomendaciones técnicas diseñadas para facilitar las cosas. el adepto a encontrar y adquirir el Lado Luminoso de la Fuerza, y no más Togo. Esta es sólo tu batalla, avanza con valentía y regresa victorioso.

Entonces. El paso a paso del primer manual está perfectamente calibrado y espero que no os suponga ningún problema; lo único que se requiere de ti es que estés atento, repitiendo escrupulosamente los pasos detallados... y al cabo de una hora tu primer blog esté listo, podrás tomarte un descanso y pasar al segundo, algo más interesante. Y es aquí donde, quizás, puedan resultar útiles algunos consejos de despedida, a los que pasaremos ahora.

Comencemos con la afirmación de que estos métodos son bastante capaces (como opción) de parecerse a lo que se muestra a continuación, pero de ninguna manera son iguales que en el original:

aplicación/controladores/posts_controller.rb

# La acción de actualización actualiza la publicación con la nueva información def update if @post.update_attributes(post_params) flash[:notice] = "¡Publicación actualizada correctamente!" redirigir_to posts_path else flash[:alert] = "¡Error al actualizar la publicación!" render:edit end end # La acción mostrar muestra la publicación individual después de recuperar la identificación def show end # La acción destruir elimina la publicación permanentemente de la base de datos def destroy @post = Post.find(params[:id]) if @post . destroy flash[:notice] = "¡Publicación eliminada correctamente!" redirigir_to posts_path else flash[:alert] = "¡Error al actualizar la publicación!" fin fin

Pero prueba esto y aquello, ¿por qué no? Vamonos.

Segundo blog, aunque más complejo (editor de artículos añadido CKEditor Y idear, una herramienta flexible para autenticación en aplicaciones Rails), por alguna razón carece de la capacidad de dejar comentarios en el original. Tendrá que llenar esta deficiencia usted mismo: proceda por analogía con la descripción de la creación del primer blog, solo se requerirán cambios muy pequeños: en pocas palabras, en lugar de artículo Y artículos tendrás el primer blog correo Y publicaciones en el segundo blog, esa es básicamente la diferencia. Ten cuidado y todo saldrá bien.

recaptcha También tendrás que vincular tú mismo los comentarios: sí, sí, esto no es Joomla para ti, acostúmbrate. Sin embargo, no se requieren esfuerzos titánicos; el proceso de conexión recaptcha se describe en detalle en el artículo Conexión de Recaptcha en la aplicación Rails. A continuación, no está de más ajustarse idear de tal forma que el blog funcione (¡al menos al principio!) en modo monousuario, permitiendo a muchos de sus lectores el modo SÓLO LECTURA, es decir, prohibiremos el registro de nuevos usuarios para empezar. Hay una gran variedad de recetas en Internet sobre cómo hacer esto, pero, en mi opinión, el truco más competente de este tipo se encuentra en Wiki devise, en el material llamado Cómo: configurar devise como un sistema de usuario único. . A saber: creamos un nuevo controlador:

aplicación/controladores/registrations_controller.rb:

Controlador de Inscripciones de Clases< Devise::RegistrationsController before_action:one_admin_registered?, only: [:new, :create] protected def one_admin_registered? if ((Admin.count == 1) & (admin_signed_in?)) redirect_to root_path elsif Admin.count == 1 redirect_to new_admin_session_path end end end

luego lo anulamos en rutas.rb, y listo:

#devise_for:admins devise_for:admins, controladores: (registros: "registros")

CKEDITOR.editorConfig = function(config) ( // config.enterMode = 2; //deshabilitado

Completamente config.enterMode = CKEDITOR.ENTER_BR // presionando la entrada ENTER KEY
config.shiftEnterMode = CKEDITOR.ENTER_P; //presionando la entrada SHIFT + ENTER KEYS

Config.autoParagraph = falso; // detiene la inserción automática de

Enfocado);

Quizás, para empezar, esto sea realmente todo... maldita sea, casi me olvido de lo más importante. Si va a implementar su nuevo blog en héroeku- añade estas tres líneas a

configuración/aplicación.rb

Config.assets.precompile += Ckeditor.assets config.assets.precompile += %w(ckeditor/*) config.autoload_paths += %W(#(config.root)/app/models/ckeditor)

De lo contrario CKEditor se negará a trabajar para usted en su nuevo lugar.

Uno de los primeros y más detallados libros de formación de Rails en Internet. La principal ventaja es la cobertura detallada de los temas más importantes, actualizaciones periódicas y contenido básico gratuito.

Es cierto que el recurso está íntegramente en inglés. Y es importante comprender que esto está construido en forma de libro: todos los problemas deben resolverse usted mismo. Debido a esto, no se puede predecir la duración y complejidad del entrenamiento.

2. Ferrocarriles

Otro recurso educativo muy conocido en Internet. Más de una generación de desarrolladores de Rails creció con él. También en inglés.

No está diseñado como un curso de formación completo, sino como una serie de screencasts: lecciones breves sobre un tema específico. Hay muchas lecciones, puedes encontrarlas sobre casi cualquier tema.

Lamentablemente, el proyecto dejó de actualizarse en 2013.

3. Rieles para zombis

Una divertida introducción al juego sobre raíles para principiantes en el estilo de juego de misiones con atmósfera zombie. Muy popular entre los principiantes.

Es conveniente porque no necesita instalar nada en su computadora. Todos los problemas se resuelven en el navegador. Paso a paso, avanzas en el juego y comienzas a comprender los conceptos básicos de Ruby on Rails.

Si no entiendes nada de programación, esta es tu elección. No hay temas complejos en el curso, nada distrae la atención de lo básico. En Inglés.

3.Udemy

Gran colección de cursos en vídeo. Entre ellos hay muchos para Ruby y Ruby on Rails. No tiene sentido proporcionar enlaces específicos: elija según sus gustos según el precio o la popularidad.

El formato Udemy implica cursos bastante cortos con énfasis en lecciones en video. No espere tareas serias ni apoyo rápido de los maestros.

4. Rubí Bursa

Un potente curso breve sobre los conceptos básicos del desarrollo de Rails. Profesores experimentados, buen programa.

La presencia personal del estudiante en el curso es deseable y se lleva a cabo únicamente en las grandes ciudades de Ucrania.

5. Desarrollo en Ruby on Rails de Evil Martians

Un curso intensivo de tres días impartido por uno de los equipos de Ruby on Rails con más experiencia en Rusia.

Rara vez se hace. Es caro (a juzgar por las críticas, vale la pena). Requiere presencia personal. Apto sólo para programadores avanzados; los principiantes no tienen nada que hacer allí.

6. Curso intensivo online de Ruby on Rails de “A Good Programmer”

Un nuevo proyecto de un equipo conocido en Youtube por sus cursos Ruby para principiantes.

El programa intensivo de 3 meses está diseñado para principiantes y promete convertirte en un programador junior con una cartera de no menos de 12 aplicaciones inteligentes.

El curso consta de lecciones en vídeo, tareas prácticas, apoyo para profesores y seminarios web periódicos.

A juzgar por canal de Youtube y comentarios de usuarios: estos chicos saben lo que están haciendo y no te aburrirás con ellos.

Publicaciones sobre el tema.