Autor Tema: Re: [Tutorial]Busquedas filtradas en Ruby on Rails utilizando MetaSearch y mas  (Leído 9712 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado edu_guerr

  • Sv Member
  • ***
  • Mensajes: 463
De necio haciendo pruebas con Ruby on rails me encontre por ahi con una gema que facilita las busquedas filtradas y no viene incluida por default en rails y es MetaSearch, pues aqui les dejo un pequeno tutorial el cual cree conforme iba probando, por si le sirve a alguien como se usa esta gema. 
+++++++++++++++++++++++++++++++++++++++++++++++
Se usa:
Ruby 1.8.7
Rails 3.0.9
Sqlite3
Gema meta_search

La aplicación se llamara app_filtrar, cambiarse al directorio  en el cual se creara la aplicación, en este caso esta en C:\rails.
En la consola:
$ rails new app_filtrar
Se creara un directorio app_filtrar con una estructura interna, en el cual mayormente se usa Gemfile, app, db.
Cambiarse a app_filtrar:


Gemfile
En el archivo Gemfile básicamente van las ‘gemas’ necesarias que se usaran en la aplicación, en este caso se usara una gema para búsquedas llamado meta_search, una aplicación básica incluye gemas como ‘sqlite3’(Bases de datos por default en Ruby on rails).
En pocas palabras una gema en otros lenguajes, a mi forma de ver,  seria el equivalente a un  import en java, un include en C ,un  Imports en Visual Basic.
Editaremos el archivo Gemfile, esto se puede hacer con nano, vi, kate, notepad, y agregar
gem ‘meta_search’


Parte del archivo Gemfile:


Se agregaran a nuestra aplicación las gemas requeridas en Gemfile, incluyendo la que se acaba de agregar (meta_search) con bundle install.
En la consola:
$ bundle install


Creando la base de datos(por default es SQLite):
(La configuración para la conexión esta en app_filtrar\config\database.yml no será necesario modificarla en este ejemplo)


Base de datos: empleado
Campos: nombre[string], tel[string], direccion[text]

Cambiarse al directo \app_filtrar\db   

En la consola
$ rake db:create
$ rails generate scaffold empleado nombre:string tel:string  direccion:text


Siempre en la consola.

$ rake db:migrate
La salida será:

(in C:/rails/app_filtrar)
==  CreateEmpleados: migrating ================================================
-- create_table(:empleados)
   -> 0.0156s
==  CreateEmpleados: migrated (0.0156s) =======================================

Acceso a la base de datos creada:Podemos acceder a la base de datos creada en el directorio \app_filtrar\db usando SQLiteDatabaseBrowserPortable o SQLite Manger  como extensión de Firefox.


Vista de la tabla empleado en SQLiteDatabaseBrowserPortable:


Modelo, Vista, Controlador

Vista:
Editaremos el archivo index.html.erb que se encuentra en la ruta:

C:\rails\app_filtrar\app\views\empleados

Sin tocar el código que ya esta  en index.html.erb crearemos un formulario para la búsqueda, en este caso por nombre del empleado:

nombre_contains:  nombre es como se le puso al campo en la tabla, y es el que se quiere filtrar.

Agregamos el siguiente codigo a  index.html.erb

Código: [Seleccionar]
<%= form_for @search do |f| %>   
 <p>   
<%= f.label :nombre_contains %>   
<%= f.text_field :nombre_contains %>   
</p>   
<p class="button"><%= f.submit "Search" %> </p>   
<% end %> 


Controlador:

Únicamente editando def index en el archivo empleados_controller.rb y dejando intacto el demás codigo, la ruta donde se encuentra este archivo es C:\rails\app_filtrar\app\controllers

Quedaria de la siguiente manera

Código: [Seleccionar]

 def index
    @search = Empleado.search(params[:search])   
    @empleados = @search.all 
  end

Llama al método search de la gema meta_search y le pasa como parámetros lo que se quiere buscar, así se obtendrá los registros que van conforme a la consulta.


Visualizando la aplicación:

Rails ya tiene incluido su propio servidor WEBrick,iniciando el servidor, en la consola:

$rails s

Y en el navegador http://localhost:3000/empleados y se tendría que ver lo siguiente, hasta aquí rails ha creado un CRUD y le estamos agregando una búsqueda filtrada usando la gema meta_search,  se puede ver que esta ‘New empleado’ para prueba, agregar unos cuantos.

Para agregar un nuevo empleado , cerrar SQLiteDatabaseBrowserPortable o SQLite Manager  , sino  mostrara un error que ha bloqueado la base de datos.


Como ya se dijo antes, rails  ha creado un CRUD , y se han agregado 4 registros usando ‘New Empleado’:



Haciendo la búsqueda filtrada:


Aquí faltaría agregarle por ejemplo validaciones, entre otras cosas, pero el objetivo era mostrar como hacer una búsqueda filtrada de manera sencilla usando una gema que no viene incluida por default en rails.
« Última Modificación: agosto 29, 2011, 09:36:02 pm por edu_guerr »

Desconectado JaiMe

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 1485
  • λ | h+
Re: [Tutorial]Busquedas filtradas en Ruby on Rails utilizando MetaSearch
« Respuesta #1 : agosto 02, 2011, 07:02:46 pm »
Nice @edu_guerr, lo acabo de probar y todo funciona bien.

Se ve bastante útil la gema https://github.com/ernie/meta_search
"Unless you try to do something beyond what you have already mastered, you will never grow."
― Ralph Waldo Emerson

Desconectado edu_guerr

  • Sv Member
  • ***
  • Mensajes: 463
Re: [Tutorial]Busquedas filtradas en Ruby on Rails utilizando MetaSearch
« Respuesta #2 : agosto 02, 2011, 08:24:30 pm »
La ventaja que da el framework, de en poco tiempo ver un resultado ,hace mas interesante estar probando,la verdad me ha gustado mucho este lenguaje  de lo poco que he visto.

La informacion del link esta muy buena :thumbsup:,

Desconectado hkadejo

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 3346
Re: [Tutorial]Busquedas filtradas en Ruby on Rails utilizando MetaSearch
« Respuesta #3 : agosto 02, 2011, 08:25:47 pm »
Dos grandes tutoriales en el top10 de post recientes de svc....esto si esta bueno  :thumbsup:

Desconectado edu_guerr

  • Sv Member
  • ***
  • Mensajes: 463
Re: [Tutorial]Busquedas filtradas en Ruby on Rails utilizando MetaSearch y mas
« Respuesta #4 : agosto 29, 2011, 09:34:53 pm »
Agregando algunas validaciones al modelo y un poco de Don't Repeat Yourself

Arriba se creado un CRUD, y se muestra el uso de la gema Meta Search para hacer búsquedas filtradas sin tener que usar sql en nuestro controlador, con esto no se quiere decir que no  se usara sql,   Ruby on Rails creara las sentencias  cada vez que sea necesaria, esto se puede ver en:

\app_filtrar\log\development.log donde se guarda el log del servidor WEBrick  (development es la base de datos ya creada)


Conociendo el principio  No te repitas? Se validara una vez en el modelo, y esta funcionara en todo la app, tanto en “New empleado” como en “Edit empleado”

Hasta este momento, si se quiere editar o crear un nuevo empleado, y por ejemplo el  campo ”nombre”  queda en blanco, y se hace clic en el botón “Create empleado”, se almacenara en blanco el registro, para evitar esto se agregaran algunas validaciones.




Se trabajara en el modelo que ya esta creado

En el  archivo empleado.rb en la ruta:

\app_filtrar\app\models\empleado.rb


Al abrirlo tendra esta forma:

Código: [Seleccionar]
class Empleado < ActiveRecord::Base
 
 
end

..Y se agregaran las siguientes líneas que permitirán hacer algunas validaciones

Código: [Seleccionar]
class Empleado < ActiveRecord::Base
  validates_presence_of :nombre #NO PERMITE CAMPOS EN BLANCO
  validates_presence_of :tel
  validates_presence_of :direccion
  validates_uniqueness_of :nombre #NO PERMITE REGISTROS DUPLICADOS
  validates_numericality_of :tel  #VALIDA QUE SEA NUMERO
  validates_length_of :tel, :is => 8 # Y QUE LA LONGITUD SEA 8
end

nombre,tel direccion  son los campos de la tabla ya creada y que se hacen mención en las líneas que se agregaron para validaciones:


Lo interesante de esto es, que con solo una vez que valide cualquier campo , esta validación funcionara en cualquier parte del proyecto donde use ese campo, por ejemplo con “nombre”, se uso: 

  validates_presence_of :nombre    #NO PERMITE CAMPOS EN BLANCO

En otros lenguajes,  normalmente se crea una clase, ahí se crearía la función que valide,  luego para usarla debo instanciar  en el formulario o modulo donde se usara la función para llamarla.

en Ruby on Rails solo debo colocar una vez  validates_presence_of :nombre en el modelo   y  funcionara la validación tanto para “agregar un nuevo empleado” como para “Editar el empleado” sin necesidad de agregar código en las vistas.

  Creando nuevo empleado:    
 “New empleado” ==>"Create empleado”  se valida….


Así mismo se validara “nombre” al  editar el empleado......
 y  se muestran las demás validaciones que se agregaron a  \app_filtrar\app\models\empleado.rb



Con esto ya se tienen algunas validaciones basicas.


Desconectado edu_guerr

  • Sv Member
  • ***
  • Mensajes: 463
Re: [Tutorial]Busquedas filtradas en Ruby on Rails utilizando MetaSearch y mas
« Respuesta #5 : septiembre 30, 2011, 10:37:16 am »
Texto de introduccion  a rails, primero porque cuesta encontrar algo en espanol,casi todo esta en ingles y se si se encuentra info es de versiones anteriores de rails.

Descarga: Aqui

Libro: "El maldito libro de los descarrilados"
Idioma:Español
Pag 92
-Introduccion
-Instalacion
-Conexion a base de datos
-MVC,validaciones, intregridad referncial en rails y mas

Se usa en el libro:
ruby 1.8.7
Rails 3.0.9
sqlite3
mysql