Está en la página 1de 15

Acerca

Contacto Buscar

Xenode Systems Blog

Tutorial Express de Ruby on Rails: Hacer Un Blog


by Manuel Escudero

Bueno, este tutorial lo escribo en particular para un amigo mo, pero si a alguien ms le beneficia, est bien... Antes de comenzar, me gustara dar mi punto de vista sobre el tutorial en s, ya que en la web encontrars muchos tutoriales de "Introduccin a Rails" que son precisamente enfocados a crear un blog. La gente los ve y dice: "Bueno a mi de qu fregados me va a servir aprender a hacer un blog!?; Dicen que Twitter fue escrito en Rails! Dnde est la magia?" (Al principio cuando me iniciaba en esto de la programacin yo pensaba as, no crean que no) Pero despus comprend muchas cosas... Y es en base a eso y a un voto de confianza que me gustara me dieras, que te pido que te quedes y sigas este tuto si el tema te interesa. Vers, crear un blog es la manera ms concisa y correcta de empalmar los conocimientos bsicos de un Framework Web, ya que de manera simple (es decir entendible) usamos de todo un poco en cuanto a conceptos. Por otro lado, estoy seguro de que quiz ms de uno de ustedes intent ya seguir uno de estos tutoriales sin resultados, y estoy seguro de que se debi no a ustedes, sino al maestro. Considero que tengo facilidad para ensear (pues lo he hecho antes) y conozco un poco ms de cerca que quiz muchas personas la manera en que trabajan el cerebro y el subconsciente humanos, por lo tanto, s que ste tutorial es diferente a cualquiera que te hayas topado antes y estoy seguro de que aprenders algo o bien, se esclarecern muchas cosas que no entendas... Con eso dicho, Comencemos:

NOTAS: ste tutorial asume que Sabes Ruby, tienes un entorno Ruby & RoR instalado en tu computadora y por lo menos tienes una idea bsica de Etiquetas html Si no sabes casi nada o muy poco de stas 3 cosas que mencion, entonces quiz est tutorial no es para ti todava... Te invito a checar los enlaces anteriores para darte una idea y volver ac mejor preparado(a), listo para absorber bien el conocimiento que detallaremos aqu. Por si alguien se lo pregunta, para el tutorial se usa Rails 3.2.5 con Ruby 1.9.2, pero cualquier versin de Rails 3.2.x con Ruby 1.9.2 o 1.9.3 estara bien para seguir el tutorial sin problemas... Y por cierto! este tutorial y el cdigo que generaremos en el hacen a su vez del campo de pruebas perfecto para poner en prctica lo que aprendimos el otro da en el tutorial de git, #SloUnConsejo...
Como les menciono arriba, hoy construiremos un blog con RoR en este tutorial y con ello consolidaremos conocimientos bsicos de Rails que nos ayudarn a continuar con nuestro objetivo de aprender y masterizar dicho framework. En este tutorial no se usar scaffolding para auto generar cdigo, pero tampoco entraremos a cosas ms profundas como son RSpec y TDD todava. La idea es que comprendas ms o menos cmo se conforma una webapp rails y cmo puedes armarla para despus practicar por ti mismo... Otra cosa importante que tenemos que mencionar es que si nunca has trabajado con un framework que siga el principio/patrn de MVC (Model-View-Controller) entonces quiz no entenders algunas cosas que aqu se detallen. En caso de que no entiendas el concepto MVC (pero s sepas ruby) quiz lo mejor para

converted by Web2PDFConvert.com

ti es que primero vayas y realices el mini-curso de RailsForZombies y luego regreses ac a poner en prctica, reforzar, comprender y asimilar lo all aprendido. Ahora s, a lo que vamos: 1.- Crear Aplicacin y Controlador con Acciones y Vistas Obviamente, lo primero es crear la aplicacin (su esqueleto) con Rails... Fcil. Simplemente corremos:
1 rails new rubyblog 2 cd rubyblog 3 rails g controller Posts index show new create edit update destroy

Explicado: En el comando 1 lo que hacemos es decirle a Rails que queremos crear una aplicacin nueva, donde rubyblog se refiere al nombre de la aplicacin rails que crearemos. Esto en resumen nos generar un directorio con el nombre de la aplicacin que contendr todos los archivos y carpetas de la misma, Se le puede llamar como uno quiera a nuestra app.
Con el comando 2 nos movemos (dentro de la consola) al directorio de la aplicacin recin creada. Finalmente, con el comando 3 creamos un controlador que dentro contendr unas acciones predeterminadas junto con sus respectivas vistas (index, show, new, create, edit, update, destroy). Por si tienen problemas entendiendo de lo que hablo, Un controlador es, digamos, un archivo (o grupo de archivos si usamos varios) que va o van a definir el comportamiento de la aplicacin web que crearemos, en general lo que definimos en ste archivo ms que nada son las formas por medio de las cuales el/los modelos interactuarn con las vistas de la aplicacin. Para esto, imaginen los modelos como los archivos o grupos de archivos que describen sus bases de datos, mientras que las vistas son los archivos/pginas que nosotros le mostraremos al usuario en su navegador web. Resumiendo:

En el Modelo va todo lo referente a la base de Datos En la vista va todo lo referente a diseo y Maquetacin El controlador es el archivo que define cmo es que se van a comunicar los 2 anteriores.

Por convencin, siempre usaremos un nombre Plural y Capitalizado para nombrar el controlador, su nombre debe ser una referencia al nombre del objeto principal que se va a manipular en base a dicho controlador. Como vern, en el ejemplo se usa "Posts" porque el objeto que generalmente se manipula ms en un blog son los posts precisamente; Esto quiere decir que generalmente crearemos controladores para los entes ms importantes de nuestra aplicacin: Pueden ser Usuarios, Posts u otras cosas que queramos manipular (y con "manipular" me refiero a Crear, Leer, Actualizar y Destruir) dentro de la webapp. Para esto, cabe destacar que el controlador se guarda en el directorio de app/controllers de nuestro proyecto con la nomenclatura: nombre_controller.rb y las vistas estn en app/views/nombrecontrolador con la nomenclatura: accin.html.erb;

Qu quiere decir sto?


Bueno. Si abrimos el controlador en nuestro editor de cdigo o IDE favorito (Les recomiendo gedit vitaminado) vamos a ver que se trata de un simple archivo de ruby que incluye varios mtodos definidos con el nombre de las acciones que escogimos:

Click para agrandar

converted by Web2PDFConvert.com

Como nos ensearon desde la primaria, una accin es aquello que queremos/vamos a hacer, y las describimos en nuestra lengua por medio de los verbos. Los que tengan nocin de Ruby sabrn que los mtodos son los equivalentes a los verbos del espaol en este lenguaje y que, por ende, ste archivo llamado controlador es el que define las acciones de nuestra aplicacin por medio de los mtodos que nosotros escribiremos. A lo mejor reconoces todas las acciones descritas en el archivo, pues son simples verbos (crear, actualizar, destruir etc.) Pero quiz los primeros 2 nombres te resulten confusos: index y show. Bueno: index es la accin (mtodo) que define a nuestra pgina principal y cmo mostraremos informacin ah, mientras que show es la accin/mtodo que describe cmo mostraremos los objetos individuales de nuestro ente (objeto ms importante) del controlador. En el ejemplo, esto quiere decir que index va a definir el comportamiento de nuestra pgina principal del blog cuyo propsito es mostrar todos los posts y show por su parte se encargar de definir el mtodo por medio del cual tomaremos y mostraremos las pginas (vistas) de cada post individual.

NOTA: Estas mismas acciones que generamos aqu son las acciones base que ocupars en prcticamente cualquier controlador rails de cualquier proyecto que realices generalmente.
Sobre las vistas, si abrimos una veremos algo parecido a lo siguiente:

Click para agrandar

Una vista no es ms que una pgina HTML, la cual se encarga de mostrar contenido al navegador. Su extensin es .html.erb porque las pginas HTML que usamos en Rails pueden contener cdigo ruby embedido, esto quiere decir que para maquetar una pgina HTML en RoR puedes usar todo el HTML que conozcas (aderezado con Javascript, CSS etc.) y adems puedes utilizar cdigo ruby dentro de ella, mismo que renderizar y/o funcionar en el navegador siempre y cuando est dentro de las etiquetas:

<%= Insertar Cdigo Aqu %> o bien <% Insertar Cdigo aqu %>

Respectivamente. Explicar ms sobre sto y las vistas en especfico dentro de poco... No te desesperes. 2.- Definiendo Rutas Las rutas son todo aquello que define el nombre y direccin de las URL dentro de tu aplicacin web, la manera ms fcil y prctica de crearlas es generando un recurso, que en idioma de programador es "rutas RESTful de un ente/objeto" de la aplicacin web. En nuestra app del ejemplo el nico objeto/ente que manipulamos son los posts, por lo tanto generaremos un recurso RESTful para los posts precisamente. Crear un recurso es fcil, slo aade:
resources :objeto

a tu archivo routes.rb que se encuentra dentro de config... Hay otras maneras de crear rutas, y como vers en el archivo routes.rb cuando lo abras, habr algo as:

Click para agrandar

converted by Web2PDFConvert.com

Esto es porque rails nos gener unas rutas manualmente para cada accin, y puedes generarlas as tu tambin, pero lo idneo es hacerlo en base a recursos, ya que es ms fcil y funcional. Editaremos se archivo de manera que nos quede as:

Click para agrandar

Y si no entiendes porqu, no te preocupes, lo importante es que comprendas que por cada ente/objeto principal que quieras manipular en tu aplicacin debes crear un recurso para el mismo en tu archivo routes.rb como le hicimos ahorita con los posts. Lo siguiente que haremos (aprovechando que estamos en el archivo de las rutas) ser definir cul ser la pgina principal de nuestra aplicacin web, o ms bien, hacia donde apuntar la URL madre (por ejemplo http://www.myapp.com/); Esto se logra aadiendo una lnea como esta a nuestro routes.rb:
root :to => "posts#index"

Para el ejemplo esa lnea es la indicada, pero si estuviramos haciendo otra cosa, reemplazaramos posts por el nombre del controlador e index por el nombre de la accin que queremos que se haga cargo. Obviamente dicha accin deber tener una vista ya definida para que pueda mostrar algo... El archivo routes.rb termina vindose as:

Click para Agrandar

Y si todo ha salido bien, es hora de iniciar nuestro servidor para ver cmo van las cosas. Estando dentro del directorio de nuestro proyecto con nuestra consola, corremos:
rails s

y esto iniciar el servidor... Nos vamos a http://localhost:3000 en nuestro navegador web y veremos algo como sto:

Click para Agrandar

(P.D. Sintete libre de explorar esa pgina y sus enlaces); Por otro lado, si nos vamos a http://localhost:3000/posts veremos algo as (la pgina principal de nuestra aplicacin):

converted by Web2PDFConvert.com

Click para Agrandar

Pero hey! si http://localhost:3000 equivale a lo que sera la pgina principal de nuestra webapp en un entorno de produccin (de momento est corriendo en nuestra computadora solamente y no en la web) entonces porqu no renderiza la pgina index directamente si ya lo configuramos as en el routes.rb anteriormente con root :to? Muy simple: Porque tenemos otro index dentro de la aplicacin, el cual se encuentra en el directorio "public" donde se guardan principalmente pginas y contenidos estticos. Para que nuestra app muestre lo que debe al acceder a la raz y no la pgina de bienvenida, debemos eliminar dicha pgina, desde consola o desde nuestro explorador de archivos. La pgina en cuestin que debemos eliminar es public/index.html y una vez eliminada, si accedemos a nuestra url http://localhost:3000 y refrescamos el navegador veremos la verdadera pgina principal, aquella que especificamos en routes.rb anteriormente.

NOTA: Todo lo que metas en public renderizar desde la raz en adelante, por ejemplo si yo tengo en el directorio public una pgina que se llame "holamundo.html", al acceder a http://localhost:3000/holamundo.html ver dicha pgina.
3.- Modelos Ya explicamos lo que es un Modelo arriba en el post. Ahora lo generaremos... Estando dentro del directorio de nuestra app con la consola, correremos el comando:
rails g model Post title:string content:text

Que lo que har ser crear un modelo (esqueleto de tabla de base de datos para rpido) que contendr la informacin de nuestro ente principal. Los modelos siempre se tienen que nombrar igual que el controlador del ente al que correspondan pero en singular y capitalizados, como vern en el ejemplo, debido a que nuestro controlador es Posts nuestro modelo generado se llama Post, justo despus del nombre, tenemos que poner los campos que tendrn cada uno de los objetos que vayamos a generar (en este caso posts) que tienen como campos un titulo del tipo "string" (Cadena de texto en Ruby) y un contenido que es simplemente un rea de texto. Si tienes experiencia con otros frameworks y bases de datos, te preguntars porqu no generamos un id. sto se debe a que en Rails el ID se genera automticamente cada que creamos un objeto para nuestra base de datos... En pocas palabras el campo de ID est ah, pero no lo especificas tu y no tienes porqu. Cada objeto que creemos tendr un ID diferente (1, 2, 3, etc), de forma automtica. Ahora tenemos que migrar nuestra base de datos para que use la interfaz ActiveRecord de Rails (hablaremos de sto poquito ms adelante) y se haga como tal; La migracin se hace con:
rake db:migrate

Como el modelo es el archivo que establece la configuracin de nuestra base de datos, seguro muchos de ustedes pensarn que es algo mgico y complicado, pero no lo es! los invito a verlo:

Click para Agrandar

Bsicamente un modelo se trata de un archivo de Ruby guardado en app/models con el nombre que le pusimos y terminacin rb que describe por medio de una clase un objeto individual de lo que sera el ente que manipularemos en nuestra webapp (En este caso 1 Post) y pues lo que describe ms que nada es el nombre del objeto individual (ntese que se capitaliza) y hace que herede de "ActiveRecord::Base" que en trminos simples se trata de la interfaz Rails por medio
converted by Web2PDFConvert.com

de la que gestionamos nuestra base de datos. Luego le otorga los atributos que pedimos y denota que son accesibles. Para todos aquellos que han usado otros frameworks en el pasado (o bien bases de datos) aqu es donde empieza la parte en la que adorarn a Rails, vern: Sin importar en qu base de datos desarrollemos, con Ruby on Rails no tenemos que sabernos los comandos de gestin de dicha base de datos, puesto que todo se maneja en base a ActiveRecord, el ayudante para bases de datos de Rails. Las cosas que haremos por medio de ActiveRecord sern Crear, Leer, Actualizar y Eliminar objetos de nuestra base de datos y gracias a estos comandos podremos hacer que la interfaz de nuestra aplicacin web lo haga tambin. (No entrar a detalle en ActiveRecord pero si te interesa conocerlo a fondo, checa RailsForZombies); Sin embargo, si dejar unos ejemplos bsicos engist rpidamente: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

# ActiveRecord CRUD (Create-Read-Update-Destroy) # CREAR POSTS: Post.create(:title => "Nuestro Primer Post", :content => "Contenido para el primer post") # LEER/ENCONTRAR POSTS: Post.all # (todos) Post.find(id) # (uno) # Despus de encontrar 1 post: Post.title # (Nos regresa el ttulo de ese post) Post.content # (Nos regresa el contenido de ese post) # ACTUALIZAR POSTS: post.update_attribute(:content, "Contenido Cambiado") # (cambia 1 atributo) [con/de la variable "post" definida con los mtodos de LEER] post.update_attributes(:title => "Primer Post", :content => "El contenido") # (para cambiar todos los atributos) [con/de la variable "post" definida con los mtodos de LEER] # DESTRUIR POSTS: post.destroy(id) # [con variable "post" que nosotros elijamos segn id]

This Gist brought to you by GitHub.

ActiveRecord - CRUD Examples.rb view raw

Ahora bien, por si no has captado la relacin, nuestro modelo hace que los objetos individuales que creemos para nuestro Ente de datos hereden directamente de ActiveRecord::Base para 2 cosas: 1. Que nazcan y pertenezcan en/a nuestra base de datos 2. Que podamos manipularlos con una serie de comandos predefinidos dentro del cdigo rails (ActiveRecord) a todos para dar funcionalidad a la interfaz.

Esto quiere decir que lo que queremos lograr es que haya una pgina web que nos permita CREAR POSTS por ejemplo, una para EDITARLOS y ELIMINARLOS entre otras cosas. Todas estas acciones se consiguen a travs de la conexin con la base de datos que establecemos con el modelo. 4.- Ms sobre rutas Si corremos el comando:
rake routes

converted by Web2PDFConvert.com

Estando dentro del directorio de nuestra app en terminal, veremos algo como esto:

Click para Agrandar

Este comando nos da la informacin detallada sobre nuestras rutas, qu mtodo HTTP ocupan, cul es su "path" en la aplicacin, cmo es que se amm... concatena/genera ese path y qu combinacin de controlador#accin las comanda. Si tu output se ve ms o menos como el mo, entonces significa que hasta aqu vas bien y tambin significa que puedes iniciar tu servidor local con rails s en terminal y al visitar por ejemplo http://localhost:3000/posts/new vers algo como sto:

Click para Agrandar

Las preferencias de cmo se debe llamar cada ruta y a donde debe de llevar (si "no nos gustan" los defaults) se actualizan/modifican en nuestro routes.rb con parmetros, mtodos y atributos como match, as e incluso redirect_to segn el caso... Todo eso lo pueden aprender bien a bien en RailsForZombies. Es importante que sepan que cuando vamos a referirnos a una ruta en nuestro cdigo de la aplicacin (para por ejemplo establecer acciones en el controlador y as) la nombramos por como la consola nos la muestra en el output de rake routes y le aadimos _path al final, esto quiere decir que en mi cdigo si me quiero referir a la ruta que sirve para EDITAR un post, usara la variable edit_post_path por ejemplo y a esta URL le puedo pasar parmetros (como el ID del post y dems) pero eso lo explicaremos ms adelante. Una cosa ms: Recuerdas que desde el principio generamos acciones para nuestro controlador y tambin vistas? Pues bueno: Hay acciones que no requieren vista, porque simplemente son sucesos y no cosas que hace el usuario directamente por medio de una interfaz. stas acciones son Create, Destroy y Update ... Como sus vistas no son necesarias, las eliminaremos de nuestro directorio app/views/posts (Los archivos a eliminar concretamente son create.html.erb, destroy.html.erb, update.html.erb) y proseguiremos con nuestro tutorial. 5.- Validaciones Recuerdas cuando abrimos el archivo del modelo? Pareca muy simple cierto? Pues bien. Un archivo de modelo tambin nos sirve para definir validaciones en nuestra aplicacin web. Esto quiere decir, declarar planes de accin en caso de que X o Y condiciones se cumplan o no se cumplan. Podemos validar muchos datos y caractersticas dentro de nuestro modelo, tales como la presencia , longitud y originalidad de un campo especfico, entre otras. Para el ejemplo usaremos el siguiente cdigo de validaciones (va en app/models/post.rb):
validates :title, :content, :presence => true validates :title, :length => { :minimum => 2 } validates :title, :uniqueness => { :message => "El titulo ya se uso" }

El archivo en cuestin queda as:

converted by Web2PDFConvert.com

Click para agrandar

Y pues lo que esto har ser checar (En ste orden): La presencia del ttulo y del contenido, el tamao del ttulo (que deber ser de mnimo 2 caracteres) y tambin la originalidad del mismo, esto quiere decir que no puede estar repetido. En el caso de la originalidad del ttulo (lnea 3) como vern hemos establecido un mensaje especfico a soltar cuando el error (ttulo duplicado) se suscite. 6.- Controlador-Vista Ahora lo que tenemos que hacer es definir Qu van a hacer nuestras vistas y en s, cmo ser el workflow de la aplicacin tambin. Empezaremos por escribir cdigo en las acciones de nuestro controlador (llenar los mtodos) y por cada mtodo rellenado, escribiremos la vista que realizar dicha accin/acciones predeterminadas. Explicar este proceso 1 por 1 con todas las acciones que se ocupan (Index al final): Accin Show (app/controllers/posts_controller.rb) Esta accin lo que tiene que hacer es buscar un post individualmente y regresar su ID para que (en base a lo que escribamos en nuestras vistas) lo podamos abrir en una pgina con una URL del tipo .../posts/id para verlo. El mtodo como ya sabemos es Show y el cdigo que va en ese Mtodo es:
def show @post = Post.find(params[:id]) end

Que hace exactamente lo que necesitamos. Encuentra un Post en base a su parmetro de ID, Ahora depende de nosotros como manipulemos ese dato en base a las vistas. Aqu aclaremos que creamos la variable de instancia "@post" porque vamos a manipular ese objeto mucho (ya que es nuestro objeto principal) no importa si no entiendes del todo este concepto, lo que importa es que entiendas que regularmente, cuando te quieras referir a un ente especfico en un mtodo dentro de un controlador, se tiene que describir como una variable de instancia que lleve el nombre del objeto individual y luego determine la accin. Vista Show (app/views/posts/show.html.erb) La vista Show lo que har ser simplemente ser una pgina individual para mostrar un post con su ttulo y contenido (adems de la fecha de creacin) en base a su ID. El cdigo para lograr sto es el siguiente:
<h1><%= @post.title %></h1> <p><%= @post.content %></p> <small><%= @post.created_at %></small>

Accin New (app/controllers/posts_controller.rb) Ahora tenemos que definir la accin para crear un nuevo post en nuestro controlador, dicha accin es new y lo que hace es crear un nuevo post precisamente jajajaja, el cdigo para lograr sto es el siguiente:
def new @post = Post.new end

Vista New (app/views/posts/new.html.erb) En la vista New simplemente debemos de crear un formulario que nos permita crear un post nuevo, soltando advertencias si hay errores basados en nuestras validaciones. El cdigo para hacer esto es: 1 2
converted by Web2PDFConvert.com

3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

<h1>Nuevo post</h1> <%= form_for @post do |f| %> <% if @post.errors.any? %> <h2>Errores:</h2> <ul> <% @post.errors.full_messages.each do |message| %> <li><%= message %></li> <% end %> </ul> <% end %> <p> <%= f.label :title %><br /> <%= f.text_field :title %><br /> <br /> <%= f.label :content %><br /> <%= f.text_area :content %> </p> <p> <%= f.submit "Agregar Nuevo Post" %> </p> <% end %>

This Gist brought to you by GitHub.

Vista New - Blog en Rails.erb view raw

Accin Create (app/controllers/posts_controller.rb) La accin create no tiene vista, as que slo tenemos que definir el mtodo con el siguiente cdigo en el controlador:
def create @post = Post.new(params[:post]) if @post.save redirect_to posts_path, :notice => "Post Guardado!" else render "new" end end

Como ya explicamos anteriormente, Create no tiene vista porque se trata de una accin para un suceso, es decir, slo describe el momento en que un nuevo post es creado. Toma como variable el resultado de post.new y especficamente los datos (parmetros) de ese post para validar. Luego, hacemos un condicional de if para confirmar que si el post se guarda, redireccionemos al usuario a la raz de la aplicacin (URL principal representada por la variable posts_path si recuerdas lo de las rutas) y le damos un flash message que dice "Post Guardado!" (Un flash message es una notificacin en la parte de arriba del navegador). Luego explicamos (con el bloque de else ) que si el post no se guarda, regresemos al usuario a la pgina de creacin de posts (vista new) y finalmente terminamos el mtodo y los bloques. Accin Edit (app/controllers/posts_controller.rb) La accin Edit lo que hace es encontrar un post especfico por su parmetro ID para luego pasarle ese dato a la vista de edicin, donde precisamente editaremos el post en base a una interfaz. El cdigo para nuestro mtodo edit que hace que encontremos un post por su parmetro de ID es:
def edit @post = Post.find(params[:id]) end

Y lo que hace es precisamente eso, encuentra un post indicado en base a su parmetro de ID y lo guarda en una variable de instancia que se llama @post. Vista Edit (app/views/posts/edit.html.erb) Ahora necesitamos una interfaz por medio de la cual el usuario pueda editar su post, y esto se hace con la vista Edit, cuyo cdigo es el siguiente: 1
converted by Web2PDFConvert.com

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

<h1>Editar Post</h1> <%= form_for @post do |f| %> <% if @post.errors.any? %> <h2>Errores:</h2> <ul> <% @post.errors.full_messages.each do |message| %> <li><%= message %></li> <% end %> </ul> <% end %> <p> <%= f.label :title %><br /> <%= f.text_field :title %><br /> <br /> <%= f.label :content %><br /> <%= f.text_area :content %> </p> <p> <%= f.submit "Actualizar Post" %> </p> <% end %>

This Gist brought to you by GitHub.

Vista Edit - Blog en Rails.erb view raw

Esto le presentar un formulario al usuario donde podr hacer la edicin del post que quiera, lo que simplemente significa cambiar los atributos de un objeto Post de nuestra base de datos con una interfaz grfica. Accin Update (app/controllers/posts_controller.rb) La accin update lo que hace es representar el suceso por medio del cual un post es actualizado (se le cambian los atributos con la vista de edit) dndonos un flash message para avisar. Su cdigo es el siguiente: 1 2 3 4 5 6 7 8 9

def update @post = Post.find(params[:id]) if @post.update_attributes(params[:post]) redirect_to posts_path, :notice => "Tu post se ha actualizado" else render "edit" end end

This Gist brought to you by GitHub.

Accin Update - Blog en Rails.rb view raw

Lo que hacemos aqu es primero encontrar un post por su id y guardarlo en una variable de instancia llamada @post, luego, verificamos con if si los atributos del post han sido cambiados y result exitoso el cambio, de lo contrario (gracias a else ) renderizamos la vista de "Edit" otra vez explicando el error de ser posible. Accin Destroy (app/controllers/posts_controller.rb) Sirve para ELIMINAR posts. No tiene vista y el cdigo para sta es el siguiente: 1 2 3 4 5 6

def destroy @post = Post.find(params[:id]) @post.destroy redirect_to posts_path, :notice => "Tu post se ha Borrado" end end

converted by Web2PDFConvert.com

This Gist brought to you by GitHub.

Accin Destroy - Blog en Rails.rb view raw

Lo que hacemos primero es encontrar un post por id, guardarlo en nuestra variable de instancia y luego lo borramos de la base de datos (y por ende del blog) con el mtodo Destroy, soltamos un flash message al usuario despus de borrar y listo. Finalmente, lo que haremos ser crear la accin para Index y su vista, que lo que harn ser representar la pgina principal de nuestro blog con todos los posts y botones (enlaces en ste caso) para el mismo. Accin Index (app/controllers/posts_controller.rb) Esta accin lo que tiene que hacer es simplemente encontrar TODOS los posts en la base de datos para mostrarlos en la pgina, se logra con:
def index @posts = Post.all end

Y con esto, terminamos nuestro controlador de posts... El cdigo completo del mismo es: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

class PostsController < ApplicationController def index @posts = Post.all end def show @post = Post.find(params[:id]) end def new @post = Post.new end def create @post = Post.new(params[:post]) if @post.save redirect_to posts_path, :notice => "Tu post se ha salvado" else render "new" end end def edit @post = Post.find(params[:id]) end def update @post = Post.find(params[:id]) if @post.update_attributes(params[:post]) redirect_to posts_path, :notice => "Tu post se ha actualizado" else render "edit" end end def destroy @post = Post.find(params[:id]) @post.destroy redirect_to posts_path, :notice => "Tu post se ha borrado" end end

converted by Web2PDFConvert.com

43 44
This Gist brought to you by GitHub. Controlador de Posts - Blog en Rails.rb view raw

para que vayan cotejando si se equivocaron o no. Vista index (app/views/posts/index.html.erb) Esta es la pgina principal de nuestro blog! lo que toda la gente ver, su cdigo es el siguiente: 1 2 3 4 5 6 7 8 9 10 11

<h1> Nuestro Blog </h1> <% @posts.each do |post| %> <h2><%= link_to post.title, post %></h2> <p> <%= post.content %> </p> <p> <%= link_to "Editar", edit_post_path(post) %> | <%= link_to "Borrar", post, :confirm => "Estas seguro?", :method => :delete %> </p> <hr /> <% end %> <p><%= link_to "Agregar nuevo post", new_post_path %></p>

This Gist brought to you by GitHub.

Vista Index - Blog en Rails.erb view raw

Lo que esto hace, es definir el ttulo del blog, luego un bloque de cdigo ruby que muestra todos los posts y luego una plantilla para dar formato a los datos de los posts que de ese bloque salgan. Tambin tenemos enlaces a las acciones de Edit, Delete (esta ltima pide confirmacin y a la de New en sta pgina como podrn ver. 7.- Plantillas y Ruby en las vistas Como habrs visto arriba, siempre que escribimos cdigo Ruby en una pgina HTML.ERB lo ponemos entre unas etiquetas que son <%= %> y <% %> las primeras son para escribir cdigo ruby que queremos que se imprima en la pgina, tal como por ejemplo el bloque de cdigo que suelta todos los posts en la vista index para que stos se impriman al navegador. Las segundas son para todo aquel cdigo ruby que necesitamos en la pgina pero que no queremos que se muestre (o renderice pues en el navegador), tal como cuando por ejemplo, hacemos un end de ruby para un bloque o mtodo. Ahora, en tu directorio app/views vers que hay una subcarpeta que se llama layouts Para qu es? Bueno, esta carpeta guarda las plantillas generales de las vistas de la aplicacin. Cuando creamos una vista solo escribimos el cdigo especfico de esa vista, pero al ser una pgina html lleva una declaracin, un header y un body por ejemplo no? donde va eso? todo eso lo provee la plantilla, al igual que los enlaces a CSS, Javascripts y dems. Tambin va el cdigo especfico para mostrar flash messages en nuestras pginas por ejemplo entre otras funcionalidades. Ahora es necesario que abras tu archivo app/views/layouts/application.html.erb y pegues este cdigo: 1 2 3 4 5 6 7 8 9 10 11 12 13

<!DOCTYPE html> <html> <head> <title>Blog</title> <%= stylesheet_link_tag "application", :media => "all" %> <%= javascript_include_tag "application" %> <%= csrf_meta_tags %> </head> <body> <% flash.each do |key, value| %> <p> <%= value %> </p> <% end %> <%= yield %>

converted by Web2PDFConvert.com

14 15 16 17 18

<%= yield %> </body> </html>

This Gist brought to you by GitHub.

Plantilla - Blog en Rails.erb view raw

Lo que ves aqu es la estructura bsica de una pgina web en HTML 5 con un poco de cdigo Ruby en ella, de aqu lo importante es que entiendas que todo el cdigo que est escrito en este archivo se usar y renderizar en TODAS las vistas de la aplicacin, por lo tanto si tienes cdigo que usars muchas veces, en lugar de duplicarlo en tus vistas individuales, puedes ponerlo aqu o en una parcial (a googlear!) segn sea necesario. Por otro lado, es importante que entiendas que las lneas:
1 <%= stylesheet_link_tag "application", :media => "all" %> 2 <%= javascript_include_tag "application" %> 3 <%= csrf_meta_tags %>

Lo que hacen es lo siguiente: La 1 toma todas las hojas CSS del directorio app/assets/stylesheets y las inserta en tu plantilla y por lo tanto en tus vistas con la (o las) etiquetas HTML correspondientes. Lo mismo con la lnea 2 pero con los Javascripts. Finalmente la lnea 3 pasa unos parmetros para evitar que hackeen nuestra aplicacin web, de eso no te preocupes. Ahora, la lnea:
<%= yield %>

Lo que hace es insertar el cdigo particular de cada vista individual en el lugar donde yield est ubicado dentro de la plantilla. 8.- Finalizando y Tareas... Una vez que ya terminamos el controlador, las vistas y la plantilla, nuestra aplicacin est lista para correr, inicia tu servidor y al visitar http://localhost:3000 vers el resultado final terminado. Si todo sali bien, vers algo como esto:

Click para Agrandar

Ah podrs crear, editar y borrar nuevos posts con los enlaces que ah tienes a la mano, haz algunos. Ahora, un blog bien hecho no deja que cualquiera acceda a crear posts verdad? te queda de tarea investigar cmo aadirle autorizacin/autenticacin a tu blog y adems tratar de eliminar el cdigo duplicado de tus vistas (como en edit y new) en base a una parcial. Tambin, tomando en cuenta lo de los CSS, Javascript y dems en app/assets, te recomiendo cambiar el diseo y editando las pginas de "public" aadir una de 404 error que renderice cuando de hecho haya un error 404 Todo esto podrs hacerlo si sigues RailsForZombies y por ejemplo, checas los tutoriales en video RailsCasts o preguntas en Stack Overflow... Por mi parte de momento, esto es todo. Espero que te hayas divertido y hayas entendido el tutorial. La prxima hacemos TDD con RSpec, Promesa ;)

converted by Web2PDFConvert.com

Me gusta

Twittear

Fix Rails Errors Faster


Honeybadger.io The modern error management app for Ruby and Rails
N P E R X E

Autenticacion T P O en rails S 3T sorcery :


V

Transforma I O U gedit S en un P ide O perfecto S T

Bscanos en Facebook Xenode Systems Mxico


Me gusta A 479 personas les gusta Xenode Systems Mxico.

Plug-in social de F acebook

W
Seguir

Ruby Screencasts www.metacasts.tv Ruby and Rails weekly screencasts. On your computer, device, or TV.

Become an Icon beachfrontbuilder.com Produce Video? Build your own video app Easy Task Manager Tool Dooster.net Independently rated as BEST - video Very SIMPLE to use. Free Trial KoolChart - Cool Demo www.koolchart.com Powerful HTML5/JavaScript Charts Download a free trial of KoolChart Ruby On Rails Tutorials www.trainingrite.net Become an expert in 30 days - $399 Ruby Tutorials Call:732-9986650

converted by Web2PDFConvert.com

Suscrbete a nuestro boletn para recibir nuestras nuevas entradas en tu Inbox. ;-)

Suscribirse!

40

M T

II

LO I S S

ANIME LINUX STYLE IN THE WORLD


Video de Pokemon X y Y anuncia nueva evolucin de Eevee

Dark Engell - Blog


El Grafgrafo: Libros y Caf

[SOLUCIN] "No se ha podido cargar el complemento" (Flash Chrome 24.x) en Linux

Qu hacer despus de instalar Fedora 18? Tips para conseguir un Gnome 3 Shell ms funcional y Esttico (o menos feo e insufrible pues XD) Cmo reparar una usb sin formato, imposible de formatear o en RAW

Fedora 18: Lo bueno, lo malo y lo feo (Review y Anlisis)

Este obra est bajo una Licencia Creative Commons Atribucin-NoComercial-CompartirIgual 3.0 Unported. A R C H I V O D E L B L O G

Archivo del blog

2012 Xenode Systems Blog

converted by Web2PDFConvert.com

También podría gustarte