Creación de Aplicación WEB, Ruby on Rails - AGlez-Jas/UH_Project GitHub Wiki

Aplicación web

Como mencione en la pagina inicial, para la creación de la aplicación web y como lo indica el ejercicio se siguieron los pasos descritos en http://guides.rubyonrails.org/getting_started.html sin mayores complicaciones se describen abreviadamente los pasos seguidos para la creación de la aplicación.


Primeramente se verificaron las versiones instaladas para las aplicaciones requeridas por ruby on rails:

  • Ruby 2.2.4
  • Rails 4.2.6
  • sqlite3 3.8.9

Con la excepción de sqlite3, que ya viene instalado con el diestro de LINUX, las aplicaciones ruby y rails se instalaron desde el ejercicio anterior, por lo cual no fueron necesarios pasos adicionales.

La verificación se hizo en la linea de comandos utilizando la opción --version , por ejemplo: ruby --version resulta ... ruby 2.2.4p230

El siguiente paso fue la creación del nuevo proyecto rails. Se utilizo la línea de comando:

rail new blog

en donde "blog" representa el nombre del proyecto.

Completado la ejecución de la linea de comando, se generaron los directorios y archivos necesarios para el proyecto. Como verificación se corre el proyecto a través de la linea de comando:

bin/rails server

En este punto tuve un error al tratar de correr la aplicación, el error se genero al no tener javascript corriendo. La solución fue modificar el archivo ./blog/gemfile agregando las siguientes lineas:

gem 'therubyracer',:platforms=>:ruby_
gem 'execs'

Referencia: Guion de demostración de framework de desarrollo de web


Hello, Rails

Hasta este punto es solo un proyecto vacío, que se ejecuta sin generar ninguna acción o mostrar información específica.

Para lograr que nuestra aplicación muestre Hello, Rails el primer paso es generar un controlador con una acción índex utilizando la siguiente linea de comando

bin/rails generate controller welcome index

y modificar el view controller app/views/welcome/index.html.erb agregando las siguientes líneas:

'Hello, Rails!

El siguiente paso después de la creación del "Controller y View", es indicar a Rails que se quiere mostrar el mensaje "Hello, Rails", para ello en el archivo config/routes.rb se desconecta la linea root 'welcome#index'

Rails.application.routes.draw do
get 'welcome/index'
root 'welcome#index'

Hasta este momento al correr la aplicación (bin/rails server) la aplicación mostrara el mensaje de Hello Rails! al utilizar el navegador de internet http://localhost:3000


Creando Recursos, Operaciones CRUD

Un recurso (RESOURCE) es un termino utilizado para una colección de objetos similares, por ejemplo artículos, gente o animales. Estos recursos se pueden crear, leer, actualizar y destruir, a estas operaciones las refiere el texto con el acrónimo CRUD.

Para declarar un recurso es necesario agregarlo dentro del archivo config/routes.b, para el ejercicio el nombre del recurso es article.

resources :articles

Luego de declarado el recurso articles será necesario

1.Generar un Controlador

$ bin/rails generate controller articles

El resultado de esta línea de comandos se puede observar como una clase generada dentro de la cual es posible definir los métodos:

class ArticlesController < ApplicationController
end

generada dentro del archivo app/controllers/articles_controller.rb

2.Incluir una acción dentro del controlador,para el ejercicio solo se define el método new

     class ArticlesController < ApplicationController_
        def new_
        end
     end

3.Crear los templates y formas, para ello hay que generar un nuevo archivo app/views/articles/new.html.erb

<%= form_for :article, url: articles_path do |f| %>
 <p>
    <%= f.label :title %><br>
    <%= f.text_field :title %>
  </p>
 
  <p>
    <%= f.label :text %><br>
    <%= f.text_area :text %>
  </p>
 
<p>
    <%= f.submit %>
  </p>
<% end %>

La creación de artículos se define al generar un método dentro app/controllers/articles_controller.rb

class ArticlesController < ApplicationController
    def new
    end

  def create
     render plain: params[:article].inspect
  end

 end

Posteriormente es la creación del model en Rails a través de la linea de comando:

$ bin/rails generate model Article title:string text:text

La ejecución de la línea de comandos anterior genera varios archivos entre los que destacan app/models/article.rb y db/migrate/123456797_create_articles.rb_ (el ultimo es solo un ejemplo y es diferente para cada caso) empleados para generar la estructura de la base de datos.

Los archivos de migración generados por Ruby, son clases que simplifican la creación y modificación de las tables en base de datos.

Como ejemplo:

class CreateArticles < ActiveRecord::Migration
  def change
    create_table :articles do |t|
      t.string :title
      t.text :text
 
      t.timestamps null: false
    end
  end
end

El siguiente paso dentro del ejercicio permite almacenar datos dentro de dentro de la base, para ello hay que modificar el archivo app/cotrollers/articles_controller.rb

def create
  @article = Article.new(article_params)
 
  @article.save
  redirect_to @article
end
 
private
  def article_params
    params.require(:article).permit(:title, :text)
  end

👍 El modelo Rails puede ser inicializado con sus respectivos atributos, automáticamente mapeados dentro de su columna en la base de datos.

Para mostrar un articulo almacenado en la base de datos es necesario agregar la action app/controllers/articles_controller.rb

class ArticlesController < ApplicationController
  def show
    @article = Article.find(params[:id])
  end
  
  def show
    @article = Article.find(params[:id])
  end
 
  def new
  end

y su vista (view) creando un nuevo archivo app/views/articles/show:

<p>
  <strong>Title:</strong>
  <%= @article.title %>
</p>
 
<p>
  <strong>Text:</strong>
  <%= @article.text %>
</p>

o si queremos mostrar la lista de datos almacenados...

app/views/articles/index.html

<h1>Listing articles</h1>
 
<table>
  <tr>
    <th>Title</th>
    <th>Text</th>
  </tr>
 
  <% @articles.each do |article| %>
    <tr>
      <td><%= article.title %></td>
      <td><%= article.text %></td>
    </tr>
  <% end %>
</table>

👍Aqui podemos probar nuestros avances( bin/rails server )

En este punto el ejercicio indica como crear links para navegar entre páginas

por ejemplo: app/views/welcome/index.html

<h1>Hello, Rails!</h1>
<%= link_to 'My Blog', controller: 'articles' %>

app/views/articles/index.html.erb

<%= link_to 'New article', new_article_path %>

app/views/articles/new.html.erb

<%= form_for :article, url: articles_path do |f| %>
  ...
<% end %>
 
<%= link_to 'Back', articles_path %>

Para actualizar registros se agregan el metodo update dentro del archivo app/controllers/articles_controller.rb

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
 
private
  def article_params
    params.require(:article).permit(:title, :text)
  end

Para actualizar registros se agregan el metodo update dentro del archivo app/controllers/articles_controller.rb

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
 
private
  def article_params
    params.require(:article).permit(:title, :text)
  end

Y se edita el archivo app/views/articles/index.html.erb para hacer que se muestre el link "SHOW"


<table>
  <tr>
    <th>Title</th>
    <th>Text</th>
    <th colspan="2"></th>
  </tr>
 
  <% @articles.each do |article| %>
    <tr>
      <td><%= article.title %></td>
      <td><%= article.text %></td>
      <td><%= link_to 'Show', article_path(article) %></td>
      <td><%= link_to 'Edit', edit_article_path(article) %></td>
    </tr>
  <% end %>
</table>

👍 Básicamente Rails facilita el manejo de las bases de datos (Crear, Leer, Actualizar y Borrar registros) a través de la creación de métodos dentro de la clases y establecimiento de acciones. También es notorio la simplicidad con se generan las vistas views. El framework es intuitivo y genera los archivos necesarios.

Hasta este punto ArticlesController app/controllers/articles_controller.rb quedaría

class ArticlesController < 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

Nota, se incluye tareas para modificar y borrar registros.


###Agregando un segundo modelo

Nuevamente a través de la línea de comandos:

$ bin/rails generate model Comment commenter:string body:text article:references

se generan 4 archivos:

  • db/migrate/201604160101_create_comments.rb:(Nombre del archivo es diferente)Migración para crear la tabla de comentarios en la base de datos.
  • app/models/comments.rb:El modelo Comment
  • test/models/comments_test.rb: Modulo de prueba para el modelo comments
  • test/fixtures/comments.yml:Muestra de comments para usarse en prueba

Nota: Es necesario correr el comando bin/rake db:migrate

Para asociar el nuevo modelo


Regreso a inicio

⚠️ **GitHub.com Fallback** ⚠️