You are on page 1of 6

TALLER RUBY ON RAILS [tinestri@cadit ror]$ rails recetario [tinestri@cadit ror]$ cd recetario [tinestri@cadit recetario]$ ruby script/server -p 3000

[tinestri@cadit recetario]$ ruby script/server -p 3000 ./script/../config/boot.rb:28:Warning: require_gem is obsolete. Use gem instead. => Booting WEBrick... => Rails application started on http://0.0.0.0:3000 => Ctrl-C to shutdown server; call with --help for options [2008-04-16 14:51:16] INFO WEBrick 1.3.1 [2008-04-16 14:51:16] INFO ruby 1.8.5 (2007-09-24) [i386-linux] [2008-04-16 14:51:16] INFO WEBrick::HTTPServer#start: pid=24938 port=3000 Probar: cadit.anahuac.mx:3000/

Abrir una segunda ventana e ir a recetario. Vamos a hacer un pequeo ejemplo [tinestri@cadit ror]$ cd recetario Vamos a crear un archivo llamado mi_prueba_controller.rb, el cuan contendr el esquelto de MiPruebaController. [tinestri@cadit recetario]$ ruby script/generate controller Imprueba Este archivo est en: recetario/app/controllers [tinestri@cadit recetario]$ ls app config db lib public README test vendor components database.yml doc log Rakefile script tmp [tinestri@cadit recetario]$ cd app [tinestri@cadit app]$ cd controllers [tinestri@cadit controllers]$ ls application.rb mi_prueba_controller.rb~ receta_controller.rb~ mi_prueba_controller.rb receta_controller.rb Si abrimos el archivo vemos que no tiene nada [tinestri@cadit controllers]$ jed mi_prueba_controller.rb

Si probamos: cadit.anahuac.mx:3000/mi_prueba Unknown action mi_prueba se mapea al controlador recin creado. Aparece como si Rails hubiera tratado sin xito de localizar una accin llamada index. Por lo tanto, vamos a aadir el mtodo index a la clase Controlador: en el archivo mi_prueba_controller.rb class MiPruebaController < ApplicationController def index render_text "Hola amigos de Ruby On Rails" end end Ahora tratamos otra vez: cadit.anahuac.mx:3000/mi_prueba Podemos poner otra accin al controlador, por ejemplo, el mtodo dilber class MiPruebaController < ApplicationController def inde render_text "Hola amigos de Ruby On Rails" end def dilbert render_text "Que facil" end end Ahora probamos con : cadit.anahuac.mx:3000/mi_prueba/Dilbert CREACION DE BASES DE DATOS DEL LIBRO DE RECETAS Ir a: [tinestri@cadit recetario]$ ls app config db lib public README test vendor components database.yml doc log Rakefile script tmp [tinestri@cadit recetario]$ cd db [tinestri@cadit db]$ jed recetas.sql En este archivo vamos a crear la tabla recetas, escribimos: CREATE TABLE recetas(id smallint(5) UNSIGNED NOT NULL AUTO_INCREMENT, titulo VARCHAR(50), instrucciones TEXT, creado TIMESTAMP NOT NULL, actualizado TIMESTAMP,

PRIMARY KEY (id)); En config buscamos database.yml para configurar la conexin a la base de datos y: [tinestri@cadit config]$ jed database.yml MySQL (default setup). Versions 4.1 and 5.0 are recommended. # # Install the MySQL driver: # gem install mysql # On MacOS X: # gem install mysql -- --include=/usr/local/lib # On Windows: # There is no gem for Windows. Install mysql.so from RubyForApache. # http://rubyforge.org/projects/rubyforapache # # And be sure to use new-style password hashing: # http://dev.mysql.com/doc/refman/5.0/en/old-client.html development: adapter: mysql database: recetario_development username: tinestri password: socket: /var/lib/mysql/mysql.sock host: localhost # Warning: The database defined as 'test' will be erased and # re-generated from your development database when you run 'rake'. # Do not set this db to the same as development or production. test: adapter: mysql database: recetario_test username: tinestri password: socket: /var/lib/mysql/mysql.sock host: localhost production: adapter: mysql database: recetario_production username: tinestri password: socket: /var/lib/mysql/mysql.sock host: localhost El siguiente comando sirve para jalar el archivo a la base de datos [tinestri@cadit db]$ mysql recetario_development <recetas.sql

Para probar [tinestri@cadit db]$ mysql recetario_development Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 6219 to server version: 5.0.27 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> select * from recetas; Empty set (0.00 sec) Desde recetario [tinestri@cadit recetario]$ ruby scritp/generate model Receta En recetario/app/models se cre receta.rb y si lo abrimos: class Receta < ActiveRecord::Base end ActiveRecord es una biblioteca que hereda objetos y propiedades. Aqu se encuentra el objeto de negocio de la receta que Rails MAPEA sobre la tabla recetas de la base de datos. Un modelo singular de nombre de clase Receta, se mapea a una tabla de la base de datos en plural (recetas). Rails dota dinmicamente a la clase Receta de mtodos para seleccionar las filas de la tabla recetas y adems prepara un atributo para cada columna de la tabla. Se tiene una conexin dinmica entre: la clase Receta y la tabla recetas. El siguiente paso consiste en crear un controlador para las recetas con acciones para manipular las recetas de la base de datos. [tinestri@cadit recetario]$ ruby script/generate controller Receta ./script/../config/boot.rb:28:Warning: require_gem is obsolete. Use gem instead. exists app/controllers/ exists app/helpers/ create app/views/receta exists test/functional/ create app/controllers/receta_controller.rb create test/functional/receta_controller_test.rb create app/helpers/receta_helper.rb Se cre un archivo receta_controller.rb que contiene el esqueleto de definicin de la clase RecetaController y se encuentra en app/controllers, si lo abrimos:

[tinestri@cadit controllers]$ jed receta_controller.rb class RecetaController < ApplicationController scaffold :receta end scaffold :receta define acciones para todas las operaciones en la base de datos, estas acciones son list, show, edit y delete. Probemos: cadit.anahuac.mx:3000/receta/new

CREACIN DE ACCIONES Y VISTAS

<html> <head> <title>Todas las recetas</title> </head> <body> <h1>Libro de recetas - Todas las Recetas</h1> <table border="1"> <tr> <td width="80%"><p align="center"><i><b>Receta</b></i></td> <td width="20%"><p align="center"><i><b>Fecha</b></i></td> </tr> <% @recetas.each do |receta| %> <tr> <td><%= link_to receta.titulo, :action => "show", :id => receta.id %></td> <td><%= receta.fecha %></td> </tr> <% end %> </table> <p><%= link_to "Crear nueva receta", :action => "new" %></p> </body> </html>

class RecetaController < ApplicationController scaffold :receta def list @recetas = Receta.find_all end

end

You might also like