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
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
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
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!