0

Full text search con thinking sphinx

Posted by mauro on Mar 31, 2009 in Rails

Sphinx es un excelente motor de busquedas que nos permite hacer consultas ultra optimizadas en nuestras applicaciones.
Gracias al plugin Thinking sphinx podemos portar este motor a nuestra aplicacion rails. A continuacion los pasos para configurar nuestra aplicacion con thinking sphinx

Instalar Sphinx

Si van a usar como motor de base de datos mysql asegurarse de tener instalado las librerias de mysql

sudo apt-get install libmysqlclient15-dev

Bajamos la source desde http://sphinxsearch.com/ version recomendada (0.9.8.1)

wget http://sphinxsearch.com/downloads/sphinx-0.9.8.1.tar.gz

Descomprimir el codigo

tar -xvzf sphinx-0.9.8.1.tar.gz

Compilamos

cd sphinx-0.9.8.

sphinx-0.9.8# ./configure

sphinx-0.9.8# make

sphinx-0.9.8# make install

Instalamos thinking sphinx

./script/plugin install  git://github.com/freelancing-god/thinking-sphinx.git

Configurando thinking sphinx

En el modelo

En el controller

Si tenemos varias aplicaciones utilizando sphinx puede ser que tengamos problemas debido que sphinx corre como demonio utilizando el puerto 3112 por defecto.
Podriamos cambiar esto editando la opcion “port” dentro del archivo config/sphinx.conf. Tambien hay que decirle a thinking sphinx en que puerto debe buscar a sphinx, para esto creamos el siguiente archivo

Iniciando thinking sphinx
En thinking sphinx tenemos disponibles las siguientes tareas

rake thinking_sphinx:configure # Generate the Sphinx configuration file using Thinking Sphinx’s settings
rake thinking_sphinx:delayed_delta # Process stored delta index requests
rake thinking_sphinx:index # Index data for Sphinx using Thinking Sphinx’s settings
rake thinking_sphinx:restart # Restart Sphinx
rake thinking_sphinx:running_start # Stop if running, then start a Sphinx searchd daemon using Thinking Sphinx’s settings
rake thinking_sphinx:start # Start a Sphinx searchd daemon using Thinking Sphinx’s settings
rake thinking_sphinx:stop # Stop Sphinx using Thinking Sphinx’s settings

 
0

Customizando will_paginate on RAILS

Posted by mauro on Mar 18, 2009 in Rails

El plugin will_paginate es sin duda el mas utilizado en rails para la paginación de resultados. Se encuentra disponible tanto en version Plugin como en Gema.

Vista estandar del helper

El plugin incluye un helper, sorpresivamente llamado will_paginate :) que hace facil la paginación para tus vistas, un ejemplo de esto puede ser:

<%= will_paginate(User) %>

esto nos producira el siguiente codigo HTML

Como puedes ver el helper usa elementos div para contener los links o span para la paginación permitiendo de esta manera customizar el estilo de la paginacion completamente.
Un ejemplo de estilo agradable puede ser el siguiente

Algunas opciones que podemos pasar por parametro son:

container
Determina si el contenedor

esta incluido en el html generado por defecto es true.

:class
Agrega clase ccs en el contenedor

:previous_label
Permite especificar el texto de la accion previous page

:next_label
Permite especificar el texto de la accion next page

:page_links
Determina si esta incluido la opcion de mostrar los links de las paginas individuales sino solo muestra los links anterior y siguiente, por defecto es true :inner_window

:o uter_window
Permite customizar el numero de paginas a mostrar

Haciendolo a tu manera

Que pasa si nuestro querido y adorable diseñador nos pide hacer una paginacion con el siguiente formato

Tenemos dos opciones, o lo obligamos a seguir los parametros definidos en will_paginate o le partimos la cabeza :P eso fue en broma eh? bue un poquito no mas :) .
Una solucion factible seria la de sobreescribir los metodos del helper de paginate, entonces podriamos armar una clase parecida a esta

Como puedes ver the linkrenderer es una subclase de WillPaginate::LinkRenderer, el principal metodo que genera la vista de la paginacion to_html.
Una vez armado nuestra clase de paginacion customizada, podemos probarla de la siguiente manera

La opcion :render acepta el nombre de una clase como parametro.
Si queremos que por defecto cargue nuestra clase podemos sobreescribir la variable global

y ahora solo usariamos <%= will_paginate(@users) %>

Enjoy!

Copyright © 2010 Chebyte’s Blog All rights reserved.