<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ceritium.net &#187; Rails</title>
	<atom:link href="http://ceritium.net/category/programacion/rails/feed/" rel="self" type="application/rss+xml" />
	<link>http://ceritium.net</link>
	<description>José Galisteo</description>
	<lastBuildDate>Mon, 08 Mar 2010 20:16:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>no such file to load &#8212; spec/translator</title>
		<link>http://ceritium.net/534/programacion/rails/no-such-file-to-load-spectranslator/</link>
		<comments>http://ceritium.net/534/programacion/rails/no-such-file-to-load-spectranslator/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 10:02:59 +0000</pubDate>
		<dc:creator>Ceritium</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://ceritium.net/?p=534</guid>
		<description><![CDATA[El error &#8216;no such file to load &#8212; spec/translator&#8217; me salía en una Rails 2.0.2 de un proyecto antiguo, al final lo solucioné borrando la carpeta &#8216;vendor/plugins/rspec_on_rails&#8217;. No se bién porqué pero a mi ya me vale, solo necesitaba arrancar la aplicación y no me dejaba hacer rake db:create. Por cierto, si también te pide [...]]]></description>
			<content:encoded><![CDATA[<p>El error <em>&#8216;no such file to load &#8212; spec/translator&#8217;</em> me salía en una <strong>Rails 2.0.2</strong> de un proyecto antiguo, al final lo solucioné borrando la carpeta &#8216;vendor/plugins/rspec_on_rails&#8217;.</p>
<p>No se bién porqué pero a mi ya me vale, solo necesitaba arrancar la aplicación y no me dejaba hacer rake db:create.</p>
<p>Por cierto,  si también te pide &#8220;spec/rake/spectask&#8221; es que hace falta la gema rspec.</p>
]]></content:encoded>
			<wfw:commentRss>http://ceritium.net/534/programacion/rails/no-such-file-to-load-spectranslator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Formtastic, formularios semánticos</title>
		<link>http://ceritium.net/519/programacion/formtastic-formularios-semanticos/</link>
		<comments>http://ceritium.net/519/programacion/formtastic-formularios-semanticos/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 18:55:34 +0000</pubDate>
		<dc:creator>Ceritium</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Rails]]></category>

		<guid isPermaLink="false">http://ceritium.net/?p=519</guid>
		<description><![CDATA[Algo en lo que siempre pierdo mi valioso tiempo (cuando podría estar viendo episodios viejos de médico de familia) es en decidir cual es la mejor manera de maquetar un formulario, tablas, listas, párrafos, nuestro querido salto de línea&#8230; y cada vez lo hago de una forma diferente sin llegar a encontrar algo que realmente [...]]]></description>
			<content:encoded><![CDATA[<p>Algo en lo que siempre pierdo mi valioso tiempo (cuando podría estar viendo episodios viejos de médico de familia) es en decidir cual es la mejor manera de maquetar un formulario, tablas, listas, párrafos, nuestro querido salto de línea&#8230; y cada vez lo hago de una forma diferente sin llegar a encontrar algo que realmente me haga sentir que hago lo correcto.</p>
<p>Pero eso era hasta que descubrí <strong>formtastic</strong>, un <a href="http://github.com/justinfrench/formtastic/tree/master">plugin para Rails</a> que nos permite crear <strong>formularios semánticos</strong> de forma muy rápida y sencilla.</p>
<p>Con una sola línea creas el label, el campo y todo bien organizadito dentro de listas y demás historias que tanto le gustan a <a href="https://twitter.com/dcalderon">@dcalderon</a>, no puedo decir mucho más sobre el plugin, solo recomendar que lo probéis.</p>
]]></content:encoded>
			<wfw:commentRss>http://ceritium.net/519/programacion/formtastic-formularios-semanticos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Planetoid</title>
		<link>http://ceritium.net/506/internet/planetoid/</link>
		<comments>http://ceritium.net/506/internet/planetoid/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 21:49:34 +0000</pubDate>
		<dc:creator>Ceritium</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[flowersinspace]]></category>
		<category><![CDATA[planeta]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://ceritium.net/?p=506</guid>
		<description><![CDATA[Anoche gracias a un Twit de supercoco9 descubrí Planetoid, un planeta como su propio nombre indica creado por Jaime Iniesta. Además era justo lo que estábamos buscando para Flowers In Space, así que forckeé la versión de AspGems que me molaba bastante para adaptarlo a nuestras necesidades: colores y pasar de erb a haml principalmente. [...]]]></description>
			<content:encoded><![CDATA[<p>Anoche gracias a un <a href="http://twitter.com/supercoco9/status/2317771274">Twit de supercoco9</a> descubrí <a href="http://github.com/jaimeiniesta/planetoid/tree/master">Planetoid</a>, un <strong>planeta</strong> como su propio nombre indica creado por <a href="http://www.jaimeiniesta.com/">Jaime Iniesta</a>.</p>
<p>Además era justo lo que estábamos buscando para <a href="http://flowersinspace.com">Flowers In Space</a>, así que <em><a href="http://github.com/ceritium/planetoid/tree/master">forckeé</a></em> la <a href="http://github.com/javier/planetoid/tree/master">versión de AspGems</a> que me molaba bastante para adaptarlo a nuestras necesidades: colores y pasar de erb a haml principalmente.</p>
<p>Ahora solo hace falta que el resto del equipo meta sus datos en el <a href="http://planet.flowersinspace.com">planeta</a> <img src='http://ceritium.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://ceritium.net/506/internet/planetoid/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Lost In Translation</title>
		<link>http://ceritium.net/476/programacion/rails/lost-in-translation/</link>
		<comments>http://ceritium.net/476/programacion/rails/lost-in-translation/#comments</comments>
		<pubDate>Sat, 14 Mar 2009 22:39:00 +0000</pubDate>
		<dc:creator>Ceritium</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[traducciones]]></category>
		<category><![CDATA[translate]]></category>

		<guid isPermaLink="false">http://ceritium.net/?p=476</guid>
		<description><![CDATA[Acabo de liberar en GitHub una clase a la que llamo Lost In Translation. Sirve para ayudarnos en la traducción de nuestras aplicaciones Rails basadas en la API I18n y que usan como backend archivos yaml. Puede ser un buen complemento para ser usado con el plugin Translate, del que además coge algunos métodos. Usarlo [...]]]></description>
			<content:encoded><![CDATA[<p>Acabo de liberar en <a href="http://github.com/ceritium">GitHub</a> una clase a la que llamo <strong><a href="http://github.com/ceritium/lost-in-translation/tree/master">Lost In Translation</a></strong>.</p>
<p>Sirve para ayudarnos en la traducción de nuestras aplicaciones <strong>Rails</strong> basadas en la <strong>API I18n</strong> y que usan como backend archivos yaml.</p>
<p>Puede ser un buen complemento para ser usado con el plugin <a href="http://github.com/newsdesk/translate/tree/master">Translate</a>, del que además coge algunos métodos.</p>
<p>Usarlo es tan sencillo como esto:</p>
<div class="geshi no ruby">
<ol>
<li class="li1">
<div class="de1">&nbsp; i18n = LostInTranslation.<span class="me1">new</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; i18n.<span class="me1">save_translations</span></div>
</li>
</ol>
</div>
<p>Para más información pásate por el <a href="http://github.com/ceritium/lost-in-translation/tree/master">repositorio</a> y recuerda, <strong>Fork Me!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://ceritium.net/476/programacion/rails/lost-in-translation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Migraciones y CSV con FasterCSV</title>
		<link>http://ceritium.net/435/programacion/rails/migraciones-y-csv-con-fastercsv/</link>
		<comments>http://ceritium.net/435/programacion/rails/migraciones-y-csv-con-fastercsv/#comments</comments>
		<pubDate>Fri, 05 Sep 2008 23:05:24 +0000</pubDate>
		<dc:creator>Ceritium</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[CSV]]></category>
		<category><![CDATA[FasterCSV]]></category>
		<category><![CDATA[gemas]]></category>
		<category><![CDATA[gems]]></category>
		<category><![CDATA[migraciones]]></category>
		<category><![CDATA[migrate]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[raills]]></category>
		<category><![CDATA[ror]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://ceritium.net/?p=435</guid>
		<description><![CDATA[En nuestras aplicaciones a veces es necesario cargar en la base de datos gran cantidad de registros que deben estar ahí siempre. Un buen ejemplo de esto podría ser una lista de países con sus respectivas provincias y ciudades, algo con lo que seguro os encontraréis algún día si no lo habéis hecho ya. Normalmente, [...]]]></description>
			<content:encoded><![CDATA[<p>En nuestras aplicaciones a veces es necesario cargar en la base de datos gran cantidad de registros que deben estar ahí siempre.</p>
<p>Un buen ejemplo de esto podría ser una lista de países con sus respectivas provincias y ciudades, algo con lo que seguro os encontraréis algún día si no lo habéis hecho ya.</p>
<p>Normalmente, antes de conocer <strong>Rails</strong> y su filosofía, si me hubiese encontrado esto lo habría importado a la base de datos de forma manual.</p>
<p>Ante esto, he visto que algunos optan por cargar todos esos datos en la misma migración para que esta se ejecute cuando sea necesaria, pero para ello deben jugar con la consola hasta conseguir la cadena de texto con los datos que les interesa y la pegan en la migración para posteriormente procesarlas con por ejemplo un Model.create(:mi => &#8220;hash&#8221;).</p>
<p>Si necesitas volcar en la DB 1000 registros el resultado del archivo que se encargue de la migración puede ser enorme, no quiero ni imaginarme una maquina modestilla intentando abrir un fichero con miles de registros y encima queriéndolos colorear&#8230;</p>
<p><span id="more-435"></span></p>
<p>Con las cantidades de registros que estoy andando ahora para mi MacBook no es ningún problema (es la maquina más potente de la oficina <img src='http://ceritium.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ), pero el sistema anterior me parece feo y si los datos cambian durante el desarrollo debes re-escribir la migración. Para este tipo de cosas creo que lo ideal es tener todos esos datos en un archivo aparte y leerlos poco a poco desde la migración, así evitamos que nuestra computadora lo pase mal tanto al abrir el archivo para editarlo como para cargarlo en la base de datos.</p>
<p>En esta ocasión los archivos los tenía en <strong>CSV</strong> así que decidí seguir con ese mismo formato, busqué un poco y gracias a <a href="http://dotanything.wordpress.com/2007/10/10/import-csv-using-rails-migration/">dotanything</a> encontré <strong>FastCSV</strong>, una estupenda <strong>gema</strong> que nos facilitará el trabajo en general con archivos <strong>CSV</strong>, desde leerlos, procesarlos y hasta crearlos.</p>
<p>En la web de <strong>dotanything</strong> este ejemplo:</p>
<div class="geshi no ruby">
<ol>
<li class="li1">
<div class="de1">FasterCSV.<span class="me1">foreach</span><span class="br0">&#40;</span><span class="st0">&quot;#{RAILS_ROOT}/lib/symbols_database/security_list.csv&quot;</span>, <span class="re3">:row_sep</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;<span class="es0">\r</span>&quot;</span><span class="br0">&#41;</span> <span class="kw1">do</span> <span class="sy0">|</span>row<span class="sy0">|</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; field1,field2,field3 = row</div>
</li>
<li class="li1">
<div class="de1">&nbsp; Foo.<span class="me1">create</span><span class="br0">&#40;</span><span class="re3">:field1</span> <span class="sy0">=&gt;</span> field1, <span class="re3">:field2</span> <span class="sy0">=&gt;</span> field2, <span class="re3">:field3</span> <span class="sy0">=&gt;</span> field3<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
</ol>
</div>
<p>Sin embargo el método foreach que FastCSV ofrece no conseguí hacerlo funcionar, sin embargo se puede hacer algo similar con el metodo read y un bucle de toda la vida en ruby:</p>
<div class="geshi no ruby">
<ol>
<li class="li1">
<div class="de1">FasterCSV.<span class="me1">read</span><span class="br0">&#40;</span><span class="st0">&quot;#{RAILS_ROOT}/lib/symbols_database/security_list.csv&quot;</span><span class="br0">&#41;</span>.<span class="me1">each</span> <span class="kw1">do</span> <span class="sy0">|</span>row<span class="sy0">|</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; field1,field2,field3 = row</div>
</li>
<li class="li1">
<div class="de1">&nbsp; Foo.<span class="me1">create</span><span class="br0">&#40;</span><span class="re3">:field1</span> <span class="sy0">=&gt;</span> field1, <span class="re3">:field2</span> <span class="sy0">=&gt;</span> field2, <span class="re3">:field3</span> <span class="sy0">=&gt;</span> field3<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
</ol>
</div>
<p>Y creo que con esto tengo poco más que decir, para más información pasaros por la <a href="http://fastercsv.rubyforge.org/">documentación</a> de <strong>FasterCSV</strong>, para descargarlo podéis hacerlo desde <a href="http://rubyforge.org/projects/fastercsv/">RubyForge</a>.</p>
<p>No se si es el mejor sistema o si es el más rápido pero a mi me parece mucho más cómodo y limpio.</p>
]]></content:encoded>
			<wfw:commentRss>http://ceritium.net/435/programacion/rails/migraciones-y-csv-con-fastercsv/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Rating con act_as_rateable plugin</title>
		<link>http://ceritium.net/421/programacion/rails/rating-con-act_as_rateable-plugin/</link>
		<comments>http://ceritium.net/421/programacion/rails/rating-con-act_as_rateable-plugin/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 22:44:58 +0000</pubDate>
		<dc:creator>Ceritium</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[acts_as_rating]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[rating]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://ceritium.net/?p=421</guid>
		<description><![CDATA[Desde luego una de las mayores ventajas de Rails es la existencia de los plugins y gemas que nos permiten no comernos la cabeza con cosas repetitivas, pesadas o simplemente no tener que reinventar la rueda. En esta caso tenia que hacer un sistema para puntuar cosas con las típicas estrellítas que podemos ver en [...]]]></description>
			<content:encoded><![CDATA[<p>Desde luego una de las mayores ventajas de <strong>Rails</strong> es la existencia de los <strong>plugins</strong> y <strong>gemas</strong> que nos permiten no comernos la cabeza con cosas repetitivas, pesadas o simplemente no tener que reinventar la rueda.</p>
<p>En esta caso tenia que hacer un sistema para puntuar cosas con las típicas estrellítas que podemos ver en YouTube o en otras tantas webs de hoy en día. Finalmente lo conseguí, eso si gracias al plugin <a href="http://rubyforge.org/projects/rateableplugin/">act_as_rateable</a>, los gráficos de <a href="http://www.komodomedia.com/blog/2006/01/css-star-rating-part-deux/">Komodomedia</a> y la pequeña guía de <a href="http://www.naffis.com/blog/articles/2006/08/31/rails-ajax-star-rating-system">Naffis</a>.</p>
<p>La mayor diferencia entre la guía de Naffis y los pasos que yo pondré aquí es que aquí te enseñaré a sacarle toda la potencia pudiendo hacer el sistema polimórfico.</p>
<p>Advierto que a menos que estés interesado no sigas leyendo porque es un autentico ladrillo, eso si, el resultado es muy bonito <img src='http://ceritium.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p><span id="more-421"></span></p>
<p>Lo primero es instalar el <strong>plugin act_as_rateable</strong> con:</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">script<span class="sy0">/</span>plugin <span class="kw2">install</span> http:<span class="sy0">//</span>juixe.com<span class="sy0">/</span>svn<span class="sy0">/</span>acts_as_rateable</div>
</li>
</ol>
</div>
<p>Hecho esto tendremos que crear una migración con los campos necesarios para nuestro sistema de rating, en un archivo como &#8220;db/migrate/xxx_create_ratings.rb&#8221; escribimos:</p>
<div class="geshi no ruby">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> CreateRatings<span class="sy0">&lt;</span> <span class="re2">ActiveRecord::Migration</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">def</span> <span class="kw2">self</span>.<span class="me1">up</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; create_table <span class="re3">:ratings</span>, <span class="re3">:force</span> <span class="sy0">=&gt;</span> <span class="kw2">true</span> <span class="kw1">do</span> <span class="sy0">|</span>t<span class="sy0">|</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; t.<span class="me1">column</span> <span class="re3">:rating</span>, <span class="re3">:integer</span>, <span class="re3">:default</span> <span class="sy0">=&gt;</span> <span class="nu0">0</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; t.<span class="me1">column</span> <span class="re3">:created_at</span>, <span class="re3">:datetime</span>, <span class="re3">:null</span> <span class="sy0">=&gt;</span> <span class="kw2">false</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; t.<span class="me1">column</span> <span class="re3">:rateable_type</span>, <span class="re3">:string</span>, <span class="re3">:limit</span> <span class="sy0">=&gt;</span> <span class="nu0">15</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="re3">:default</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;&quot;</span>, <span class="re3">:null</span> <span class="sy0">=&gt;</span> <span class="kw2">false</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; t.<span class="me1">column</span> <span class="re3">:rateable_id</span>, <span class="re3">:integer</span>, <span class="re3">:default</span> <span class="sy0">=&gt;</span> <span class="nu0">0</span>, <span class="re3">:null</span> <span class="sy0">=&gt;</span> <span class="kw2">false</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; t.<span class="me1">column</span> <span class="re3">:user_id</span>, <span class="re3">:integer</span>, <span class="re3">:default</span> <span class="sy0">=&gt;</span> <span class="nu0">0</span>, <span class="re3">:null</span> <span class="sy0">=&gt;</span> <span class="kw2">false</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; add_index <span class="re3">:ratings</span>, <span class="br0">&#91;</span><span class="st0">&quot;user_id&quot;</span><span class="br0">&#93;</span>, <span class="re3">:name</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;fk_ratings_user&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">def</span> <span class="kw2">self</span>.<span class="me1">down</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; drop_table <span class="re3">:ratings</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
</ol>
</div>
<p>Realizamos la migración:</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">rake migrate</div>
</li>
</ol>
</div>
<p>Creamos el controlador que se encargue nuestros ratings en &#8220;rating_controller.rb&#8221; por ejemplo:</p>
<div class="geshi no rails">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> RatingController <span class="sy0">&lt;</span> ApplicationController</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">def</span> rate</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; rateable_type = params<span class="br0">&#91;</span><span class="re3">:rateable_type</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">@asset</span> = <span class="kw3">eval</span><span class="br0">&#40;</span>rateable_type<span class="br0">&#41;</span>.<span class="me1">find</span><span class="br0">&#40;</span>params<span class="br0">&#91;</span><span class="re3">:id</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Rating.<span class="me1">delete_all</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span class="st0">&quot;rateable_type = ? AND rateable_id = ? AND user_id = ?&quot;</span>, rateable_type, <span class="re1">@asset</span>.<span class="me1">id</span>, current_user.<span class="me1">id</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">@asset</span>.<span class="me1">add_rating</span> Rating.<span class="kw5">new</span><span class="br0">&#40;</span><span class="re3">:rating</span> <span class="sy0">=&gt;</span> params<span class="br0">&#91;</span><span class="re3">:rating</span><span class="br0">&#93;</span>, <span class="re3">:user_id</span> <span class="sy0">=&gt;</span> current_user.<span class="me1">id</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
</ol>
</div>
<p>Ya falta menos, ahora debemos generar las vistas de nuestro rating, creamos la carpeta &#8220;rating&#8221; en &#8220;views&#8221; y dentro de el creamos dos archivos:</p>
<p>_rating.html.erb</p>
<div class="geshi no css">
<ol>
<li class="li1">
<div class="de1"><span class="re1">.star-rating</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">list-style</span><span class="sy0">:</span> <span class="kw2">none</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">margin</span><span class="sy0">:</span> <span class="re3">0px</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">padding</span><span class="sy0">:</span> <span class="re3">0px</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">125px</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">25px</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">relative</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="re4">/images/star<span class="re1">.gif</span></span><span class="br0">&#41;</span> <span class="kw1">top</span> <span class="kw1">left</span> <span class="kw2">repeat-x</span><span class="sy0">;</span> <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re1">.star-rating</span> li <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">padding</span><span class="sy0">:</span> <span class="re3">0px</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">margin</span><span class="sy0">:</span> <span class="re3">0px</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">float</span><span class="sy0">:</span> <span class="kw1">left</span><span class="sy0">;</span> <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">.star-rating</span> li a <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">block</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">25px</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">25px</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">text-decoration</span><span class="sy0">:</span> <span class="kw2">none</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">text-indent</span><span class="sy0">:</span> -<span class="re3">9000px</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">z-index</span><span class="sy0">:</span> <span class="nu0">20</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">absolute</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">padding</span><span class="sy0">:</span> <span class="re3">0px</span><span class="sy0">;</span> <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="re1">.star-rating</span> li a<span class="re2">:hover</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="re4">/images/star<span class="re1">.gif</span></span><span class="br0">&#41;</span> <span class="kw1">left</span> <span class="kw2">center</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">z-index</span><span class="sy0">:</span> <span class="nu0">2</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">left</span><span class="sy0">:</span> <span class="re3">0px</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">border</span><span class="sy0">:</span> <span class="kw2">none</span><span class="sy0">;</span> <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">.star-rating</span> li<span class="re1">.current-rating</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="re4">/images/star<span class="re1">.gif</span></span><span class="br0">&#41;</span> <span class="kw1">left</span> <span class="kw1">bottom</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">absolute</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">25px</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">block</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">text-indent</span><span class="sy0">:</span> -<span class="re3">9000px</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">z-index</span><span class="sy0">:</span> <span class="nu0">1</span><span class="sy0">;</span> <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re1">.star-rating</span> a<span class="re1">.one-star</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">left</span><span class="sy0">:</span> <span class="re3">0px</span><span class="sy0">;</span> <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">.star-rating</span> a<span class="re1">.one-star</span><span class="re2">:hover</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">25px</span><span class="sy0">;</span> <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re1">.star-rating</span> a<span class="re1">.two-stars</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">left</span><span class="sy0">:</span> <span class="re3">25px</span><span class="sy0">;</span> <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">.star-rating</span> a<span class="re1">.two-stars</span><span class="re2">:hover</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">50px</span><span class="sy0">;</span> <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re1">.star-rating</span> a<span class="re1">.three-stars</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">left</span><span class="sy0">:</span> <span class="re3">50px</span><span class="sy0">;</span> <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">.star-rating</span> a<span class="re1">.three-stars</span><span class="re2">:hover</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">75px</span><span class="sy0">;</span> <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re1">.star-rating</span> a<span class="re1">.four-stars</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">left</span><span class="sy0">:</span> <span class="re3">75px</span><span class="sy0">;</span> <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">.star-rating</span> a<span class="re1">.four-stars</span><span class="re2">:hover</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">100px</span><span class="sy0">;</span> <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re1">.star-rating</span> a<span class="re1">.five-stars</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">left</span><span class="sy0">:</span> <span class="re3">100px</span><span class="sy0">;</span> <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">.star-rating</span> a<span class="re1">.five-stars</span><span class="re2">:hover</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">125px</span><span class="sy0">;</span> <span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>rate.rjs<br />
<lang pre="rails"><br />
page.replace_html &#8220;star-ratings-block&#8221;, :partial => &#8216;rating/rating&#8217;, :locals => { :asset => @asset }
</pre>
<p>Y para terminar con las vistas nos faltan los estilos y las imágenes necesarias, que podremos sacar de <a href="http://www.komodomedia.com/blog/2006/01/css-star-rating-part-deux/">Komodomedia</a>, en este caso tendremos que añadir a nuestro archivos .css las siguientes lineas de código:</p>
<div class="geshi no rails">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Image <span class="sy0">&lt;</span> <span class="re2">ActiveRecord::Base</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ...</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="me1">acts_as_rateable</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ...</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
</ol>
</div>
<p>Y para que valla como la seda tendréis que guardar en vuestra carpeta  "images" en "public" la imagen <a href="http://ceritium.net/wp-content/uploads/2008/08/star.gif">star.gif</a></p>
<p>Ya con esto lo tenemos todo casi listo, ahora solo nos falta decidir que queremos que sea "rateable", por ejemplo si tememos el controlador "image.rb" haremos:</p>
<div class="geshi no rails">
<ol>
<li class="li1">
<div class="de1"><span class="sy0">&lt;%</span>= <span class="kw5">render</span> <span class="re3">:partial</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;rating/rating&quot;</span>, <span class="re3">:locals</span> <span class="sy0">=&gt;</span> <span class="br0">&#123;</span> <span class="re3">:asset</span> <span class="sy0">=&gt;</span> <span class="re1">@image</span> <span class="br0">&#125;</span> <span class="sy0">%&gt;</span></div>
</li>
</ol>
</div>
<p>En este caso vemos que el modelo controla unas imágenes, lo más habitual para esto sería poder "ratearlas" en el show. Pues en el show.html.erb pegamos:</p>
<div class="geshi no rails">
<ol>
<li class="li1">
<div class="de1"><span class="re1">@image</span> = Image.<span class="me1">find</span> <span class="re3">:first</span> <span class="co1">#por ejemplo</span></div>
</li>
</ol>
</div>
<p>@image sería el objeto generado en tu controlador por:</p>
<div class="geshi no ">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>Estos dos últimos pasos son los únicos que tendremos que repetir para añadirlos a otros modelos como Videos, Posts, etc.</p>
<p>Seguro que tu puedes mejorarlo, refactorizarlo, incluso tener tantas estrellas máximas como puedas.</p>
<p>¿Encontráis fallos?</p>
]]></content:encoded>
			<wfw:commentRss>http://ceritium.net/421/programacion/rails/rating-con-act_as_rateable-plugin/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>GearsOnRails (Google Gears + Rails)</title>
		<link>http://ceritium.net/380/programacion/gearsonrails-google-gears-rails/</link>
		<comments>http://ceritium.net/380/programacion/gearsonrails-google-gears-rails/#comments</comments>
		<pubDate>Thu, 17 Jul 2008 23:42:37 +0000</pubDate>
		<dc:creator>Ceritium</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Software libre]]></category>
		<category><![CDATA[gears]]></category>
		<category><![CDATA[gearsonrails]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google gears]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://ceritium.net/?p=380</guid>
		<description><![CDATA[Hace un par de días pude ver en el blog de Google Code Updates un post sobre un plugin que están desarrollando que permite la integración de Google Gears en nuestras aplicaciónes Ruby on Rails. El plugin en concreto se llama GearsOnRails y ya está disponible para ser descargado desde su Google Code. En la [...]]]></description>
			<content:encoded><![CDATA[<p>Hace un par de días pude ver en el blog de <a href="http://google-code-updates.blogspot.com/2008/07/take-your-rails-application-offline.html">Google Code Updates</a> un post sobre un plugin que están desarrollando que permite la integración de <a href="http://code.google.com/intl/es_ALL/apis/gears/">Google Gears</a> en nuestras aplicaciónes <strong>Ruby on Rails</strong>.</p>
<p>El plugin en concreto se llama <strong>GearsOnRails</strong> y ya está disponible para ser descargado desde su <a href="http://code.google.com/p/gearsonrails/">Google Code</a>.</p>
<p>En la página principal podemos encontrar dos sencillos ejemplos, pero hasta la fecha no los he podido hacer funcionar correctamente. De todas formas parece que este plugin está en una fase bastante temprana pues apenas tiene documentación ni están deserrollados los tests.</p>
<p>Lo malo es que por lo que he leído en la <a href="http://groups.google.com/group/gearsonrails">lista de discusión</a> van bastante lentos en su desarrollo, pero de todas formas creo que cuando esté listo será un bombazo.</p>
<p>La última fuente que me queda (porque aún apenas hay nada en la red hablando de este plugin) es escuchar el podcast (<a href="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=257272708&#038;s=143441">iTunes</a>) en inglés en el que <a href="http://google-developer-podcast.googlecode.com/files/gearsonrails-googledeveloperpodcast.mp3">entrevistan a dos de sus desarrolladores</a> si no me equivoco.</p>
<p>También he podido encontrar lo que parece ser el <a href="http://gearsonrails.blogspot.com/">blog oficial de GearsOnRails</a> creado hace solo dos días, espero que esto signifique mayor actividad para el proyecto.</p>
]]></content:encoded>
			<wfw:commentRss>http://ceritium.net/380/programacion/gearsonrails-google-gears-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mis plugins habituales (II)</title>
		<link>http://ceritium.net/361/programacion/mis-plugins-habituales-ii/</link>
		<comments>http://ceritium.net/361/programacion/mis-plugins-habituales-ii/#comments</comments>
		<pubDate>Mon, 26 May 2008 22:32:32 +0000</pubDate>
		<dc:creator>Ceritium</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[acts-as-commentable]]></category>
		<category><![CDATA[attachment-fu]]></category>
		<category><![CDATA[bundle-fu]]></category>
		<category><![CDATA[file-column]]></category>
		<category><![CDATA[friendships]]></category>
		<category><![CDATA[permalinks]]></category>
		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://ceritium.net/?p=361</guid>
		<description><![CDATA[Hace ya varias semanas publiqué un post llamado &#8220;Mis plugins habituales en Rails&#8221;, la verdad es que la lista era bastante cortita, pero como es normal según me he ido introduciendo en el framework mis necesidades han ido creciendo y otras veces simplemente he encontrado plugins que han resulto cosas mejor a como las hacía [...]]]></description>
			<content:encoded><![CDATA[<div align="center"><img src="http://ceritium.net/wp-content/uploads/2008/05/bruce-on-rails.jpg" alt="" title="bruce-on-rails" width="411" height="304" class="aligncenter size-full wp-image-362" />
</div>
<p>Hace ya varias semanas publiqué un post llamado <a href="http://ceritium.net/318/programacion/rails/mis-plugins-habituales-en-rails/">&#8220;Mis plugins habituales en Rails&#8221;</a>, la verdad es que la lista era bastante cortita, pero como es normal según me he ido introduciendo en el <strong>framework</strong> mis necesidades han ido creciendo y otras veces simplemente he encontrado plugins que han resulto cosas mejor a como las hacía yo.</p>
<ul>
<li><a href="http://www.kanthak.net/opensource/file_column/">File Column</a>: Este seguro que muchos lo conocéis, como este hay muchos, otro que suele usar mucha gente es el attachment-fu, pero a mi este me ha estado siendo suficiente hasta el momento, quizás un día de estos pruebe el <a href="http://agilewebdevelopment.com/plugins/attachment_fu">attachment-fu</a>.
</li>
<li><a href="http://code.google.com/p/bundle-fu/">Bundle-fu</a>: Este plugin cuando lo descubrí me pareció magnifico, hace una labor muy concreta pero a veces muy necesaria como es el meter todos nuestros archivos javascript y css en uno solo, haciendo que los tiempos de cargan sean menores, solo haría falta que nos lo comprimiera y eliminase todo lo que no fuera imprescindible.
<p>No se muy bien si lo hace o no, el JavaScript que me devuelve no se si ya era así de feo o si el lo trata, pero el CSS lo envía bien legible, por un lado es bueno, pero a veces nuestra prioridad no es que sea legible si no ligero.</p>
<p>En <a href="http://flowersinspace.com">Flowers In Space</a> lo usamos actualmente en <a href="http://placechannel.com">PlaceChannel</a> y en otras aplicaciones web que llevamos para tratar de aligerar los tiempos de carga.
</li>
<li>
<a href="http://www.estadobeta.com/2007/07/27/plugin-rails-sluggable_finder/">Sluggable-finder</a>: Con este plugin te será más sencillo aún crear permalinks basados en texto y no en el id, para usar este plugin solo tendrás que añadir una linea más en el modelo que necesites y crear un campo más en la tabla a la que se refiera.</p>
<p>Si por ejemplo quieres rutas del estilo &#8220;/post/este-es-mi-nuevo-post&#8221; basadas en el titulo, el plugin te la tratará automáticamente y si ya existe en la base de datos pues será del estilo &#8220;/post/este-es-mi-nuevo-post-2&#8243;.</p>
<p>También le puedes decir que distinga entre otros campos por si quieres cosas del estilo &#8220;/user/manolo/post/mi-vida&#8221; y &#8220;/user/juan/post/mi-vida&#8221;.</p>
<p>Ambos tendrán distinto permalinks para post del mismo título.</p>
<p>Está claro que todo esto lo podríamos controlar nosotros mismo, pero este plugin ya lo resuelve muy bién, además su creador es hispano.
</li>
<p>Otros <strong>plugins</strong> que aún no he probado pero están en mi punto de mira son <a href="http://agilewebdevelopment.com/plugins/friendships">FriendShips</a> y <a href="http://agilewebdevelopment.com/plugins/acts_as_commentable">Acts-as-commentable</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ceritium.net/361/programacion/mis-plugins-habituales-ii/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Viernes con Xavier Noria</title>
		<link>http://ceritium.net/331/yo-y-el-mundo/viernes-con-xavier-noria/</link>
		<comments>http://ceritium.net/331/yo-y-el-mundo/viernes-con-xavier-noria/#comments</comments>
		<pubDate>Mon, 10 Mar 2008 15:10:39 +0000</pubDate>
		<dc:creator>Ceritium</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Yo y el Mundo]]></category>
		<category><![CDATA[xavier noria]]></category>

		<guid isPermaLink="false">http://ceritium.net/331/yo-y-el-mundo/viernes-con-xavier-noria/</guid>
		<description><![CDATA[El pasado viernes, si el mismo días que salió al aire PlaceChannel, gracias a Factoría Web 2.0 pudimos estar con Xavier Noria. Lo bueno de este día fue que Xavier no se dedicó darnos ninguna charla o taller como normalmente suele ocurrir (aunque se agradecen) si no que él en esta ocasión se dedicó exclusivamente [...]]]></description>
			<content:encoded><![CDATA[<p>El pasado viernes, si el mismo días que salió al aire <a href="http://ceritium.net/330/internet/placechannel/">PlaceChannel</a>, gracias a <a href="http://fw20.flowersinspace.com/">Factoría Web 2.0</a> pudimos estar con <a href="http://www.hashref.com/">Xavier Noria</a>.</p>
<p>Lo bueno de este día fue que <strong>Xavier</strong> no se dedicó darnos ninguna charla o taller como normalmente suele ocurrir (aunque se agradecen) si no que él en esta ocasión se dedicó exclusivamente a revisarnos el código y a darnos consejos sobre como mejorarlo.</p>
<p>No se como resultó la experiencia para el resto de grupos, pero a mi me resultó muy gratificante, pudiendo resolver algunas dudas propias con un punto de vista diferente al de mis compañeros y además recibiendo ayuda sobre cosas que no había caído que pudiesen estar mal, o que simplemente se podrías hacen mejor para seguir las convenciones de <strong>Rails</strong>.</p>
<p>Además se que el resto del equipo de <a href="http://flowersinspace.com">Flowers</a> enseñó a Xavier nuestro segundo centro de operaciones (también llamado <a href="http://sloppyjoes.es/">Sloppy Joes</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://ceritium.net/331/yo-y-el-mundo/viernes-con-xavier-noria/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Howto Restful Authentication</title>
		<link>http://ceritium.net/326/programacion/rails/howto-restful-authentication/</link>
		<comments>http://ceritium.net/326/programacion/rails/howto-restful-authentication/#comments</comments>
		<pubDate>Wed, 27 Feb 2008 23:33:33 +0000</pubDate>
		<dc:creator>Ceritium</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[restful authentication]]></category>
		<category><![CDATA[ror]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://ceritium.net/326/programacion/rails/howto-restful-authentication/</guid>
		<description><![CDATA[Seguro que en la mayoría de tus aplicaciones uses o no Rails tendrás que crear un sistema de registro y autentificación de usuarios, el cual, debido a que normalmente apenas cambia de una aplicación a otra suele ser bastante repetitivo y pesado implementarlo, eso sin contar de que para algunos puede ser bastante dificultoso. En [...]]]></description>
			<content:encoded><![CDATA[<p>Seguro que en la mayoría de tus aplicaciones uses o no Rails tendrás que crear un <strong>sistema de registro y autentificación de usuarios</strong>, el cual, debido a que normalmente apenas cambia de una aplicación a otra suele ser bastante repetitivo y pesado implementarlo, eso sin contar de que para algunos puede ser bastante dificultoso.</p>
<p>En <strong>Ruby on Rails</strong> como no podía ser de otra manera hay disponible varios plugins para crear de forma seguro y sencilla estos sistemas, pero yo solo os hablaré de uno, <a href="http://agilewebdevelopment.com/plugins/restful_authentication">Restful Authentication</a>.</p>
<p>Este <strong>plugin</strong> además de ser muy sencillo de instalar nos permite varias configuraciones posibles, pero mejor de explicaroslas todas de golpe os iré mostrando como trabaja.</p>
<p><span id="more-326"></span></p>
<p>Lo primero como siempre es instalar el plugín:<br />
<code><br />
ruby script/plugin install http://svn.techno-weenie.net/projects/plugins/restful_authentication/<br />
</code></p>
<p>Una vez instalado solo tendremos que decirle que nos genere el sistema de usuarios, con el sistema más básico podremos registrar nuestros usuarios y automáticamente loguearnos.</p>
<p><code><br />
ruby script/generate authenticated user sessions<br />
</code></p>
<p>Añadiéndole la opción &#8220;&#8211;include-activation&#8221;, nuestros usuarios tendrán que ser previamente activados a través de una URL que sería enviada por ejemplo por email.</p>
<p><code><br />
ruby script/generate authenticated user sessions --include-activation<br />
</code></p>
<p>Por último con la opción &#8220;&#8211;stateful&#8221; daremos soporte para el plugin <strong>acts_as_state_machine</strong>, para instalarlo puedes hacerlo desde su repositorio oficial de subversion:</p>
<p><code><br />
ruby script/plugin install http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk<br />
</code></p>
<p>Esto último no lo he usado demasiado así que no puedo aportar mucho sobre él, espero poder comentar algo en unos días.</p>
]]></content:encoded>
			<wfw:commentRss>http://ceritium.net/326/programacion/rails/howto-restful-authentication/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
