<?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>El Futirifoken &#187; rest</title>
	<atom:link href="http://www.gazer.com.ar/tag/rest/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.gazer.com.ar</link>
	<description>El arte de no decir nada ;-)</description>
	<lastBuildDate>Mon, 26 Dec 2011 19:56:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>/ URLs / Lindas / Con / Rails</title>
		<link>http://www.gazer.com.ar/2008/01/14/urls-lindas-con-rails/</link>
		<comments>http://www.gazer.com.ar/2008/01/14/urls-lindas-con-rails/#comments</comments>
		<pubDate>Mon, 14 Jan 2008 23:42:04 +0000</pubDate>
		<dc:creator>Gazer</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://www.gazer.com.ar/2008/01/14/urls-lindas-con-rails/</guid>
		<description><![CDATA[Unos de los proyectos actuales en los que trabajo es un portal hecho en Ruby on Rails y tenía que mostrar el nombre de la seccion y subseccion en las URLs. La primer versión fue usar las rutas anidades que se incluyen en Rails 2.0 como sigue : map.resources :sections do &#124;section&#124; section.resources :subsections do [...]]]></description>
			<content:encoded><![CDATA[<p>Unos de los proyectos actuales en los que trabajo es un portal hecho en Ruby on Rails y tenía que mostrar el nombre de la seccion y subseccion en las URLs. La primer versión fue usar las rutas anidades que se incluyen en Rails 2.0 como sigue :</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">map.<span style="color:#9900CC;">resources</span> <span style="color:#ff3333; font-weight:bold;">:sections</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>section<span style="color:#006600; font-weight:bold;">|</span>
  section.<span style="color:#9900CC;">resources</span> <span style="color:#ff3333; font-weight:bold;">:subsections</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>subsec<span style="color:#006600; font-weight:bold;">|</span>
    subsec.<span style="color:#9900CC;">resources</span> <span style="color:#ff3333; font-weight:bold;">:articles</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Sin embargo para Rails eso no son URls tan lindas como me (nos?) gustaría. Un ejemplo que daría la llamada a section_subsection_article_url sería : <code>/sections/1/subsections/2/article/4</code>, nada cómodo para alguien que quiere entrar a <code>/sections/deportes/notas/yyyyy</code>.</p>
<p>La solución llegó, en parte, al encontrar el plugin <a href="http://www.jvoorhis.com/articles/2006/08/01/announcing-resource_hacks">resource_hacks</a>, que nos permite agregar un member_path a mano el cual Rails utilizaría para armar las rutas. Con el plugin instalado nuestro ejemplo anterior quedaría como :</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">map.<span style="color:#9900CC;">resources</span> <span style="color:#ff3333; font-weight:bold;">:sections</span>, <span style="color:#ff3333; font-weight:bold;">:member_path</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'sections/:section'</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>section<span style="color:#006600; font-weight:bold;">|</span>
  section.<span style="color:#9900CC;">resources</span> <span style="color:#ff3333; font-weight:bold;">:subsections</span>, <span style="color:#ff3333; font-weight:bold;">:member_path</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'sections/:section/:subsection'</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>subsec<span style="color:#006600; font-weight:bold;">|</span>
    subsec.<span style="color:#9900CC;">resources</span> <span style="color:#ff3333; font-weight:bold;">:articles</span>, <span style="color:#ff3333; font-weight:bold;">:member_path</span> <span style="color:#006600; font-weight:bold;">=&gt;</span>; <span style="color:#996600;">'sections/:section/:subsection/:permalink'</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Y ahora si, si entramos a <code>/sections/deportes/</code> veremos la portada del sitio de Deportes.</p>
<p>Este requerimiento era &#8220;importante&#8221; ya que el cliente quere manejar en forma dinámica el sitio. No todas las secciones tienen las mismas subsecciones y demás yerbas.</p>
<p>Una vez que tuve todo eso andando, mi problema fue que los helpers <em>_url</em> y <em>_path</em> dejaron de andar alegando que los parametros de entrada no concordaban con lo esperado.</p>
<p>Lo primero que encontré luego de un par de dias de buscar fue que había que redefinir el mítodo <em>to_param</em> de los modelos para que retornen el string que quería mostrar en la URL, ya que por default retornan el id del objeto. Sin embargo esto no alcanzó. La solución llegó cuando se me ocurrió pasar un string a mano con el parámetro :id a los helpers y todo mágicamente empezó a funcionar.</p>
<p>En lugar de :</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">%</span>= link_to <span style="color:#0066ff; font-weight:bold;">@a</span>.<span style="color:#9900CC;">title</span>, section_subsection_article_url<span style="color:#006600; font-weight:bold;">&#40;</span>@a.<span style="color:#9900CC;">section</span>, <span style="color:#0066ff; font-weight:bold;">@a</span>.<span style="color:#9900CC;">subsection</span>, <span style="color:#0066ff; font-weight:bold;">@a</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">%&gt;</span></pre></div></div>

<p>Llamar a :</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">%</span>= link_to <span style="color:#0066ff; font-weight:bold;">@a</span>.<span style="color:#9900CC;">title</span>, section_subsection_article_url<span style="color:#006600; font-weight:bold;">&#40;</span>@a.<span style="color:#9900CC;">section</span>, <span style="color:#0066ff; font-weight:bold;">@a</span>.<span style="color:#9900CC;">subsection</span>, <span style="color:#0066ff; font-weight:bold;">@a</span>, <span style="color:#ff3333; font-weight:bold;">:id</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;1&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">%&gt;</span></pre></div></div>

<p>Y todo va de pelos. No se si es un comportamiento esperado, o si los helpers con este hack no serían válidos, pero esto anda al menos hasta ahora. Si a alguien se le ocurre por qué puede pasar esto o alguna mejor solución, será bienvenido <img src='http://www.gazer.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>En los controladores ahora debemos hacer las búsquedas por los strings que nos llegan mas el permalink del artículo, en lugar de utilizar el find por ID, por lo que es altamente recomendable agregar índices en las tablas <img src='http://www.gazer.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Hay otras tantas optimizaciones que hacer, pero en general, la cosa funciona.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gazer.com.ar/2008/01/14/urls-lindas-con-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

