Creación de Aplicación WEB, Ruby on Rails - AGlez-Jas/UH_Project GitHub Wiki
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
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
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