<?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>Direto e Fácil &#187; ruby on rails</title>
	<atom:link href="http://www.diretoefacil.com.br/category/ruby-on-rails/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.diretoefacil.com.br</link>
	<description>Não tem que ser difícil.</description>
	<lastBuildDate>Tue, 20 Dec 2011 15:54:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Ruby sem rails</title>
		<link>http://www.diretoefacil.com.br/2011/07/06/ruby-sem-rails/</link>
		<comments>http://www.diretoefacil.com.br/2011/07/06/ruby-sem-rails/#comments</comments>
		<pubDate>Thu, 07 Jul 2011 03:34:42 +0000</pubDate>
		<dc:creator>Márcio Gasparotto</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Sinatra]]></category>
		<category><![CDATA[diversos]]></category>
		<category><![CDATA[merb]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://www.diretoefacil.com.br/?p=260</guid>
		<description><![CDATA[Tem um tempo que eu estou querendo escrever algo sobre esse assunto, o meu tempo anda meio escasso, mas motivado por um kaizen que participei com meus amigos de trabalho hoje, arranjei um tempinho para compartilhar algumas ideias, mas chega (&#8230;)</p><p><a href="http://www.diretoefacil.com.br/2011/07/06/ruby-sem-rails/">Read the rest of this entry &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p><img alt="" src="http://3.bp.blogspot.com/-O9ujJ6UjAec/TZJKnVBt8fI/AAAAAAAAAQU/F2RXRHA1QDI/s1600/martelo+comum.jpg" title="Martelo" class="aligncenter" width="350" height="350" /><br />
Tem um tempo que eu estou querendo escrever algo sobre esse assunto, o meu tempo anda meio escasso, mas motivado por um kaizen que participei com meus amigos de trabalho hoje, arranjei um tempinho para compartilhar algumas ideias, mas chega de conversinha e vamos ao assunto!</p>
<p>O Rails é sem dúvida uma das melhores coisas que aconteceu no mundo do desenvolvimento web, mudou conceitos, quebrou paradigmas e vem sendo copiado por todos os lados (grails, cakephp, .net mvc, etc&#8230;) mas o melhor de tudo, o maior benefício que o rails nos trouxe, pelo menos na minha visão, foi expor ao mundo, a até então, desconhecida linguagem Ruby.</p>
<p>Desde então o ruby ganhou notoriedade, muita coisa legal foi feita em ruby, milhares de gems, e hoje temos a condição de usar ruby pra quase tudo.</p>
<p>Mas é interessante ver como muita gente ainda acopla e até condiciona o uso do ruby somente ao rails, esquecendo de projetos como:</p>
<ul>
<li><a href="http://www.sinatrarb.com/">http://www.sinatrarb.com</a></li>
<li><a href="http://rack.rubyforge.org/">http://rack.rubyforge.org</a></li>
<li><a href="http://www.padrinorb.com/">http://www.padrinorb.com</a></li>
<li><a href="http://www.merbivore.com/">http://www.merbivore.com</a></li>
<li><a href="http://github.com/daddye/forever">http://github.com/daddye/forever</a></li>
<li><a href="http://ramaze.net/">http://ramaze.net</a></li>
<li><a href="http://camping.rubyforge.org/">http://camping.rubyforge.org</a></li>
</ul>
<p>É claro que o rails tem seus meritos, e é normal que ele seja sempre o primeiro a vir a mente, mas tenho percebido que de um tempo pra cá o rails se tornou o martelo de muita gente,  logo, todos os problemas viraram pregos.</p>
<p>Tenho olhado o sinatra de perto faz algum tempo e to começando a &#8220;brincar&#8221; com padrino, e se você chegou até aqui na leitura deste post, gostaria de te desafiar a pensar nisso, será que o rails tem sido o seu martelo? Se sim, que tal tentar trocar de ferramenta? opções não faltam, fica o desafio. </p>
<p>Abraços!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diretoefacil.com.br/2011/07/06/ruby-sem-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Removendo referências em cascata no Rails</title>
		<link>http://www.diretoefacil.com.br/2011/02/04/removendo-referencias-em-cascata-no-rails/</link>
		<comments>http://www.diretoefacil.com.br/2011/02/04/removendo-referencias-em-cascata-no-rails/#comments</comments>
		<pubDate>Fri, 04 Feb 2011 23:48:22 +0000</pubDate>
		<dc:creator>Bruno Milare</dc:creator>
				<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[Cascata]]></category>
		<category><![CDATA[MySql]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.diretoefacil.com.br/?p=204</guid>
		<description><![CDATA[O problema: Recentement me deparei com um problema que pode ser considerado bem sutil. Eu tinha três tabelas e cada uma tinha relacionamento 1 para n com outra, algo parecido com o MER abaixo. Eu estava tratando a remoção em (&#8230;)</p><p><a href="http://www.diretoefacil.com.br/2011/02/04/removendo-referencias-em-cascata-no-rails/">Read the rest of this entry &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<h1>O problema:</h1>
<p>Recentement me deparei com um problema que pode ser considerado bem sutil.<br />
Eu tinha três tabelas e cada uma tinha relacionamento 1 para n com outra, algo parecido com o MER abaixo.</p>
<div class="wp-caption aligncenter" style="width: 468px"><img alt="MER" src="http://img138.imageshack.us/img138/3425/relacionamentodestroyde.png" title="MER" width="458" height="108" /><p class="wp-caption-text">Relacionamentos</p></div>
<p>Eu estava tratando a remoção em cascata das dependências utilizando :delete_all, e quando removia a tabela principal, somente o primeiro nível de referência era removido, deixando a última tabela intacta, fui atrás de saber o porque disso.</p>
<p>Descobri que o <em>:delete_all</em> age direto na tabela, portanto, assim que um registro é destruído suas dependências são destruídas direto no banco e a aplicação Rails nem se dá conta de que algo foi removido, então, quando a tabela intermediária é removida, a aplicação não sabe que tem que remover a próxima dependência e então pára por aí.</p>
<p>Para resolver isso utilizei o <em>:destroy</em> para remoção em cascata, esse método instancia o objeto a ser removido e então os callbacks são chamados, assim a aplicação é notificada da remoção e chama a próxima remoção de dependências, obviamente esse método é mais lento, vamos verificar isso na parte de performance.<br />
<span id="more-204"></span></p>
<h1>Na prática:</h1>
<p>Para ilustrar o problema e fazer algumas comparações, criei o cenário ilustrado no MER acima. Criando 10 produtos, para cada produto 10 categorias e para cada categoria 10 tags. Tendo portanto:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Produtos: <span style="color: #000000;">10</span><br />
Categorias: <span style="color: #000000;">10</span> x <span style="color: #000000;">10</span> = <span style="color: #000000;">100</span><br />
Tags: <span style="color: #000000;">10</span> x <span style="color: #000000;">10</span> x <span style="color: #000000;">10</span> = <span style="color: #000000;">1000</span></div></div>
<h2>:delete_all</h2>
<p>Seguem os modelos:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#9966CC; font-weight:bold;">class</span> Product <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span><br />
&nbsp; has_many <span style="color:#ff3333; font-weight:bold;">:categories</span>, <span style="color:#ff3333; font-weight:bold;">:dependent</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:delete_all</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
<span style="color:#9966CC; font-weight:bold;">class</span> Category <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span><br />
&nbsp; belongs_to <span style="color:#ff3333; font-weight:bold;">:product</span><br />
&nbsp; has_many <span style="color:#ff3333; font-weight:bold;">:tags</span>, <span style="color:#ff3333; font-weight:bold;">:dependent</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:delete_all</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
<span style="color:#9966CC; font-weight:bold;">class</span> Tag <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span><br />
&nbsp; belongs_to <span style="color:#ff3333; font-weight:bold;">:category</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></div>
<p>Temos assim o seguinte resultado:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;=<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #ff0000;">&quot;products: 10, categories: 100, tags: 1000&quot;</span> <br />
ruby-1.9.2-rc1 <span style="color: #000000; font-weight: bold;">&gt;</span> Product.all.each<span style="color: #7a0874; font-weight: bold;">&#123;</span><span style="color: #000000; font-weight: bold;">|</span>p<span style="color: #000000; font-weight: bold;">|</span> p.destroy<span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
&nbsp;=<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #ff0000;">&quot;products: 0, categories: 0, tags: 1000&quot;</span></div></div>
<p>Vemos que as tags permaneceram intactas.</p>
<h2>:destroy</h2>
<p>Nesse caso podemos alterar somente o modelo do Produto, não há necessidade de alterar a Categoria visto que as Tags são o nosso último nível e não precisamos tratar suas dependências.</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#9966CC; font-weight:bold;">class</span> Product <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span><br />
&nbsp; has_many <span style="color:#ff3333; font-weight:bold;">:categories</span>, <span style="color:#ff3333; font-weight:bold;">:dependent</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:destroy</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></div>
<p>E o resultado:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;=<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #ff0000;">&quot;products: 10, categories: 100, tags: 1000&quot;</span> <br />
ruby-1.9.2-rc1 <span style="color: #000000; font-weight: bold;">&gt;</span> Product.all.each<span style="color: #7a0874; font-weight: bold;">&#123;</span><span style="color: #000000; font-weight: bold;">|</span>p<span style="color: #000000; font-weight: bold;">|</span> p.destroy<span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
&nbsp;=<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #ff0000;">&quot;products: 0, categories: 0, tags: 0&quot;</span></div></div>
<h2>Perfomance</h2>
<p>Para cada produto, de 100, vamos aumentar o número de categorias para 1000 registros por produto e sem nenhuma registro de tag, pois assim podemos validar a performance, pois serão apresentados os mesmo resultados.</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Produtos <span style="color: #000000;">100</span><br />
Categorias <span style="color: #000000;">1000</span> x <span style="color: #000000;">100</span> = <span style="color: #000000;">100000</span></div></div>
<p>Com :delete_all:</p>
<pre>4 seconds</pre>
<p>Com :destroy:</p>
<pre>118 seconds</pre>
<p>Só pra ter um ideia, rs =)</p>
<p>Abraços,</p>
<p>Bruno.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diretoefacil.com.br/2011/02/04/removendo-referencias-em-cascata-no-rails/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Exibindo consultas do banco no console do Rails</title>
		<link>http://www.diretoefacil.com.br/2011/02/03/exibindo-consultas-do-banco-no-console-do-rails/</link>
		<comments>http://www.diretoefacil.com.br/2011/02/03/exibindo-consultas-do-banco-no-console-do-rails/#comments</comments>
		<pubDate>Thu, 03 Feb 2011 23:46:23 +0000</pubDate>
		<dc:creator>Bruno Milare</dc:creator>
				<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[Active Record]]></category>
		<category><![CDATA[Console]]></category>
		<category><![CDATA[Query]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://www.diretoefacil.com.br/?p=187</guid>
		<description><![CDATA[Muitas vezes você tem a necessidade de verificar as queries que o Active Record está realizando no banco, então, para facilitar a vida existe um maneira de exibir todas as queries no console, enquanto você realiza os comandos. Existem duas (&#8230;)</p><p><a href="http://www.diretoefacil.com.br/2011/02/03/exibindo-consultas-do-banco-no-console-do-rails/">Read the rest of this entry &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Muitas vezes você tem a necessidade de verificar as queries que o Active Record está realizando no banco, então, para facilitar a vida existe um maneira de exibir todas as queries no console, enquanto você realiza os comandos.</p>
<p>Existem duas maneiras de fazer a mesma coisa:</p>
<h1>Pelo irbrc:</h1>
<p>Nesse caso vamos alterar o arquivo <em>˜/.irbrc</em> e adicionar as seguintes linhas:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">IRB.<span style="color:#9900CC;">conf</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:IRB_RC</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#CC0066; font-weight:bold;">Proc</span>.<span style="color:#9900CC;">new</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; logger = <span style="color:#CC00FF; font-weight:bold;">Logger</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>STDOUT<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">logger</span> = logger<br />
&nbsp; <span style="color:#6666ff; font-weight:bold;">ActiveResource::Base</span>.<span style="color:#9900CC;">logger</span> = logger<br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></div>
<p>Pronto, você visualizará as queries no momento de execução:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ruby-1.9.2-rc1 <span style="color: #000000; font-weight: bold;">&gt;</span> Product.first<br />
Product Load <span style="color: #7a0874; font-weight: bold;">&#40;</span>0.3ms<span style="color: #7a0874; font-weight: bold;">&#41;</span>  SELECT <span style="color: #000000; font-weight: bold;">`</span>products<span style="color: #000000; font-weight: bold;">`</span>.<span style="color: #000000; font-weight: bold;">*</span> FROM <span style="color: #000000; font-weight: bold;">`</span>products<span style="color: #000000; font-weight: bold;">`</span> LIMIT <span style="color: #000000;">1</span></div></div>
<h1>Pela aplicação Rails:</h1>
<p>Adicione ao arquivo <em>config/environment.rb</em> o seguinte trecho de código:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#9966CC; font-weight:bold;">def</span> log_to<span style="color:#006600; font-weight:bold;">&#40;</span>stream<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">logger</span> = <span style="color:#CC00FF; font-weight:bold;">Logger</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>stream<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">clear_active_connections</span>!<br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></div>
<p>Feito isso, quando for utilizar o console, basta redirecionar a saída do log para a saída padrão (STDOUT)</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#006600; font-weight:bold;">&gt;&gt;</span> log_to STDOUT</div></div>
<p>Vocês podem verificar que desta maneira é possível redirecionar o log para onde você quiser, como o exemplo abaixo:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ruby-1.9.2-rc1 <span style="color: #000000; font-weight: bold;">&gt;</span> buffer = StringIO.new<br />
=<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #666666; font-style: italic;">#&lt;StringIO:0x00000104896908&gt;</span><br />
ruby-1.9.2-rc1 <span style="color: #000000; font-weight: bold;">&gt;</span> log_to buffer<br />
ruby-1.9.2-rc1 <span style="color: #000000; font-weight: bold;">&gt;</span> Product.first<br />
ruby-1.9.2-rc1 <span style="color: #000000; font-weight: bold;">&gt;</span> buffer.string<br />
=<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #ff0000;">&quot;  \e[1m\e[35mProduct Load (0.2ms)\e[0m  SELECT <span style="color: #780078;">`products`</span>.* FROM <span style="color: #780078;">`products`</span> LIMIT 1<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span></div></div>
<p>Acho que é isso,<br />
fica aí a dica.<br />
[]&#8216;s<br />
Bruno.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diretoefacil.com.br/2011/02/03/exibindo-consultas-do-banco-no-console-do-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails e Javascript: Escrevendo seu próprio javascript.</title>
		<link>http://www.diretoefacil.com.br/2009/12/09/rails-e-javascript-escrevendo-seu-proprio-javascript/</link>
		<comments>http://www.diretoefacil.com.br/2009/12/09/rails-e-javascript-escrevendo-seu-proprio-javascript/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 04:03:58 +0000</pubDate>
		<dc:creator>Márcio Gasparotto</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://www.diretoefacil.com.br/?p=96</guid>
		<description><![CDATA[O integração padrão entre Ruby on Rails e Javascript sempre foi muito boa, as possibilidades com rjs, métodos que respondem javascript, json, etc. ajudam muito. Mas o que vou falar hoje é sobre como escrever seu próprio javascript, sem depender (&#8230;)</p><p><a href="http://www.diretoefacil.com.br/2009/12/09/rails-e-javascript-escrevendo-seu-proprio-javascript/">Read the rest of this entry &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>O integração padrão entre Ruby on Rails e Javascript sempre foi muito boa, as possibilidades com rjs, métodos que respondem javascript, json, etc. ajudam muito.</p>
<p>Mas o que vou falar hoje é sobre como escrever seu próprio javascript, sem depender dos helpers do rails. Na minha opinião, embora a integração existente ajude muito, quando queremos ir pouco mais fundo, ou em um projeto muito grande que exija mais do que simples chamadas ajax eu prefiro criar meu próprio javascript, isso pelo simples fato de que faço do jeito que eu quero, organizo minha biblioteca de arquivos js da forma que melhor se adapta ao projeto e <span style="color: #ff0000;"><span style="text-decoration: underline;">tenho total controle sobre o que estou fazendo</span></span>, não fico &#8220;preso&#8221; ao jeito de fazer &#8220;imposto&#8221; pelo rails.</p>
<p>Só um aparte neste ponto, NÃO estou dizendo que rjs é ruim pelo contrário ele ajuda muito em muitas coisas.</p>
<p>Bem, dito isso vamos por a mão na massa! Em primeiro lugar aviso que usarei o jquery ao inves do prototype, não vou entrar em detalhes de como configurar o jquery no rails pra isso você pode usar o<a href="http://github.com/aaronchi/jrails/" target="_blank"> jrails</a> (eu uso).</p>
<p>O cenário que escolhi para esse post foi algo bem básico, só para exemplificar mesmo, imagine o seguinte: Um cadastro de produtos, esses produtos tem uma categoria e uma subcategoria, então quando eu escolher uma categoria em um select quero que o select de subcategorias seja carregado dinamicamente:</p>
<p>o meu controller eu adiciono o seguinte metodo:</p>
<pre class="textmate-source railscasts"><span class='linenum'>    1</span> <span class="source source_ruby source_ruby_rails"><span class="meta meta_function meta_function_method meta_function_method_without-arguments meta_function_method_without-arguments_ruby"><span class="keyword keyword_control keyword_control_def keyword_control_def_ruby">def</span> <span class="entity entity_name entity_name_function entity_name_function_ruby">ajax_load_sublinhas</span></span>
<span class='linenum'>    2</span>   linha <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> params<span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">[</span><span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>linha</span><span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">]</span> <span class="keyword keyword_operator keyword_operator_logical keyword_operator_logical_ruby">||</span> <span class="constant constant_numeric constant_numeric_ruby">0</span>
<span class='linenum'>    3</span>   <span class="variable variable_other variable_other_readwrite variable_other_readwrite_instance variable_other_readwrite_instance_ruby"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_ruby">@</span>sublinhas</span> <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> <span class="support support_class support_class_ruby">Sublinha</span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>sublinha_by_linha<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span>linha<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>collect <span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_ruby">{</span><span class="meta meta_syntax meta_syntax_ruby meta_syntax_ruby_start-block"> </span><span class="punctuation punctuation_separator punctuation_separator_variable punctuation_separator_variable_ruby">|</span><span class="variable variable_other variable_other_block variable_other_block_ruby">c</span><span class="punctuation punctuation_separator punctuation_separator_variable punctuation_separator_variable_ruby">|</span> <span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">[</span>c<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>description<span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> c<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>codesublinha<span class="punctuation punctuation_section punctuation_section_array punctuation_section_array_ruby">]</span> <span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_ruby">}</span>
<span class='linenum'>    4</span>   <span class="support support_function support_function_actionpack support_function_actionpack_rails">render</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>layout</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="constant constant_language constant_language_ruby">false</span>
<span class='linenum'>    5</span> <span class="keyword keyword_control keyword_control_ruby">end</span></span></pre>
<p>Ai na view do metodo:</p>
<pre class="textmate-source railscasts"><span class='linenum'>    1</span> <span class="text text_html text_html_ruby"><span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">li</span> <span class="meta meta_attribute-with-value meta_attribute-with-value_id meta_attribute-with-value_id_html"><span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_id entity_other_attribute-name_id_html">id</span><span class="punctuation punctuation_separator punctuation_separator_key-value punctuation_separator_key-value_html">=</span><span class="string string_quoted string_quoted_double string_quoted_double_html"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html">"</span><span class="meta meta_toc-list meta_toc-list_id meta_toc-list_id_html">product_codesublinha_input</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html">"</span></span></span> <span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html">class</span>=<span class="string string_quoted string_quoted_double string_quoted_double_html"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html">"</span>select optional<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html">"</span></span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span></span>
<span class='linenum'>    2</span> <span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">label</span> <span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html">for</span>=<span class="string string_quoted string_quoted_double string_quoted_double_html"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html">"</span>product_codesublinha<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html">"</span></span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span></span>SubLinha<span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">label</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span></span>
<span class='linenum'>    3</span> <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%</span> <span class="keyword keyword_control keyword_control_ruby">if</span> <span class="variable variable_other variable_other_readwrite variable_other_readwrite_instance variable_other_readwrite_instance_ruby"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_ruby">@</span>sublinhas</span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>empty? <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span>
<span class='linenum'>    4</span>   nenhuma sublinha foi encontrada.
<span class='linenum'>    5</span> <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%</span> <span class="keyword keyword_control keyword_control_ruby">else</span> <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span>
<span class='linenum'>    6</span> <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%=</span> select_tag <span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span>product_codesublinha<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> options_for_select<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="variable variable_other variable_other_readwrite variable_other_readwrite_instance variable_other_readwrite_instance_ruby"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_ruby">@</span>sublinhas</span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span>
<span class='linenum'>    7</span>                                        <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>name</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>product[codesublinha]<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span> <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span>
<span class='linenum'>    8</span> <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%</span> <span class="keyword keyword_control keyword_control_ruby">end</span> <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span>
<span class='linenum'>    9</span> <span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">li</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span></span></span></pre>
<p>Por fim no meu formulário, na pagina de cadastro de produto:</p>
<pre class="textmate-source railscasts"><span class='linenum'>    1</span> <span class="text text_html text_html_ruby"><span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%</span> <span class="support support_function support_function_viewhelpers support_function_viewhelpers_rails">content_for</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>header</span> <span class="keyword keyword_control keyword_control_start-block keyword_control_start-block_ruby">do </span><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">-%&gt;</span></span>
<span class='linenum'>    2</span>   <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%=</span> javascript_include_inputs <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span>
<span class='linenum'>    3</span> <span class="source source_js source_js_embedded source_js_embedded_html">  <span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&lt;</span><span class="entity entity_name entity_name_tag entity_name_tag_script entity_name_tag_script_html">script</span> <span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html">type</span>=<span class="string string_quoted string_quoted_double string_quoted_double_html"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html">"</span>text/javascript<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html">"</span></span> <span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html">charset</span>=<span class="string string_quoted string_quoted_double string_quoted_double_html"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html">"</span>utf-8<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html">"</span></span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&gt;</span>
<span class='linenum'>    4</span>     <span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="support support_class support_class_js">document</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>ready<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="storage storage_type storage_type_js">function</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">()</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span>
<span class='linenum'>    5</span>       <span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_double string_quoted_double_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">"</span>#product_codelinha<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">"</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>change<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="storage storage_type storage_type_js">function</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">()</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span>
<span class='linenum'>    6</span>         show_overlayer<span class="meta meta_brace meta_brace_round meta_brace_round_js">()</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
<span class='linenum'>    7</span>
<span class='linenum'>    8</span>         <span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>get<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>http://localhost:3000/products/ajax_load_sublinhas<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">, </span><span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span> linha: <span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>#product_codelinha<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>val<span class="meta meta_brace meta_brace_round meta_brace_round_js">()</span><span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">, </span><span class="storage storage_type storage_type_js">function</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span>sublinhas<span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span>
<span class='linenum'>    9</span>           <span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>#sublinhas<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>empty<span class="meta meta_brace meta_brace_round meta_brace_round_js">()</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
<span class='linenum'>   10</span>           <span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>#sublinhas<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>append<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span>sublinhas<span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
<span class='linenum'>   11</span>           hide_overlayer<span class="meta meta_brace meta_brace_round meta_brace_round_js">()</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
<span class='linenum'>   12</span>         <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
<span class='linenum'>   13</span>
<span class='linenum'>   14</span>         <span class="keyword keyword_control keyword_control_js">return</span> <span class="constant constant_language constant_language_boolean constant_language_boolean_false constant_language_boolean_false_js">false</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
<span class='linenum'>   15</span>      <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
<span class='linenum'>   16</span>   <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
<span class='linenum'>   17</span>
<span class='linenum'>   18</span> <span class="meta meta_function meta_function_js"><span class="storage storage_type storage_type_function storage_type_function_js">function</span> <span class="entity entity_name entity_name_function entity_name_function_js">show_overlayer</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_begin punctuation_definition_parameters_begin_js">(</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_end punctuation_definition_parameters_end_js">)</span></span><span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span>
<span class='linenum'>   19</span>   <span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_double string_quoted_double_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">"</span>#overlayer<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">"</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>css<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_double string_quoted_double_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">"</span>display<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">"</span></span><span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">,</span><span class="string string_quoted string_quoted_double string_quoted_double_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">"</span>block<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">"</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
<span class='linenum'>   20</span>   <span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_double string_quoted_double_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">"</span>body<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">"</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>css<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_double string_quoted_double_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">"</span>overflow<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">"</span></span><span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">,</span><span class="string string_quoted string_quoted_double string_quoted_double_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">"</span>hidden<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">"</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
<span class='linenum'>   21</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span>
<span class='linenum'>   22</span>
<span class='linenum'>   23</span> <span class="meta meta_function meta_function_js"><span class="storage storage_type storage_type_function storage_type_function_js">function</span> <span class="entity entity_name entity_name_function entity_name_function_js">hide_overlayer</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_begin punctuation_definition_parameters_begin_js">(</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_end punctuation_definition_parameters_end_js">)</span></span><span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span>
<span class='linenum'>   24</span>   <span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_double string_quoted_double_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">"</span>#overlayer<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">"</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>css<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_double string_quoted_double_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">"</span>display<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">"</span></span><span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">,</span><span class="string string_quoted string_quoted_double string_quoted_double_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">"</span>none<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">"</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
<span class='linenum'>   25</span>   <span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_double string_quoted_double_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">"</span>body<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">"</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>css<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_double string_quoted_double_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">"</span>overflow<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">"</span></span><span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">,</span><span class="string string_quoted string_quoted_double string_quoted_double_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">"</span>auto<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">"</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
<span class='linenum'>   26</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span>
<span class='linenum'>   27</span> <span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_script entity_name_tag_script_html">script</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&gt;</span>
</span><span class='linenum'>   28</span> <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%</span> <span class="keyword keyword_control keyword_control_ruby">end</span> <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">-%&gt;</span></span>
<span class='linenum'>   29</span> <span class="meta meta_tag meta_tag_block meta_tag_block_any meta_tag_block_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;</span><span class="entity entity_name entity_name_tag entity_name_tag_block entity_name_tag_block_any entity_name_tag_block_any_html">div</span> <span class="meta meta_attribute-with-value meta_attribute-with-value_id meta_attribute-with-value_id_html"><span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_id entity_other_attribute-name_id_html">id</span><span class="punctuation punctuation_separator punctuation_separator_key-value punctuation_separator_key-value_html">=</span><span class="string string_quoted string_quoted_double string_quoted_double_html"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html">"</span><span class="meta meta_toc-list meta_toc-list_id meta_toc-list_id_html">form</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html">"</span></span></span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span></span>
<span class='linenum'>   30</span> <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%</span> semantic_form_for <span class="variable variable_other variable_other_readwrite variable_other_readwrite_instance variable_other_readwrite_instance_ruby"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_ruby">@</span>product</span> <span class="keyword keyword_control keyword_control_start-block keyword_control_start-block_ruby">do </span><span class="punctuation punctuation_separator punctuation_separator_variable punctuation_separator_variable_ruby">|</span><span class="variable variable_other variable_other_block variable_other_block_ruby">form</span><span class="punctuation punctuation_separator punctuation_separator_variable punctuation_separator_variable_ruby">|</span> <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span>
<span class='linenum'>   31</span>
<span class='linenum'>   32</span>   <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%</span> form<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>inputs <span class="keyword keyword_control keyword_control_start-block keyword_control_start-block_ruby">do </span><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span>
<span class='linenum'>   33</span>     <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%=</span> form<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>input <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>code_product</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>label</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="constant constant_language constant_language_ruby">true</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>input_html</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_ruby">{</span><span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>size</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="constant constant_numeric constant_numeric_ruby">5</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>class</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>small<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span><span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_ruby">}</span> <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span>
<span class='linenum'>   34</span>     <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%=</span> form<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>input <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>name</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>label</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="constant constant_language constant_language_ruby">true</span> <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span>
<span class='linenum'>   35</span>     <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%=</span> form<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>input <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>codelinha</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>as</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>select</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>collection</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="variable variable_other variable_other_readwrite variable_other_readwrite_instance variable_other_readwrite_instance_ruby"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_ruby">@</span>linhas</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>label</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span>Linha<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span> <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span>
<span class='linenum'>   36</span>     <span class="meta meta_tag meta_tag_block meta_tag_block_any meta_tag_block_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;</span><span class="entity entity_name entity_name_tag entity_name_tag_block entity_name_tag_block_any entity_name_tag_block_any_html">div</span> <span class="meta meta_attribute-with-value meta_attribute-with-value_id meta_attribute-with-value_id_html"><span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_id entity_other_attribute-name_id_html">id</span><span class="punctuation punctuation_separator punctuation_separator_key-value punctuation_separator_key-value_html">=</span><span class="string string_quoted string_quoted_double string_quoted_double_html"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html">"</span><span class="meta meta_toc-list meta_toc-list_id meta_toc-list_id_html">sublinhas</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html">"</span></span></span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span></span>
<span class='linenum'>   37</span>     <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%</span> <span class="keyword keyword_control keyword_control_ruby">if</span> <span class="variable variable_other variable_other_readwrite variable_other_readwrite_instance variable_other_readwrite_instance_ruby"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_ruby">@</span>product</span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>new_record? <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span>
<span class='linenum'>   38</span>     <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%</span> <span class="keyword keyword_control keyword_control_ruby">else</span> <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span>
<span class='linenum'>   39</span>     <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%=</span> form<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>input <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>codesublinha</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>as</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>select</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>collection</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="variable variable_other variable_other_readwrite variable_other_readwrite_instance variable_other_readwrite_instance_ruby"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_ruby">@</span>sublinhas</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>label</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span>SubLinha<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span> <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span>
<span class='linenum'>   40</span>     <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%</span> <span class="keyword keyword_control keyword_control_ruby">end</span> <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span>
<span class='linenum'>   41</span>     <span class="meta meta_tag meta_tag_block meta_tag_block_any meta_tag_block_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_block entity_name_tag_block_any entity_name_tag_block_any_html">div</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span></span>
<span class='linenum'>   42</span>     <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%=</span> form<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>input <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>stock</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>label</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="constant constant_language constant_language_ruby">true</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>input_html</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_ruby">{</span><span class="meta meta_syntax meta_syntax_ruby meta_syntax_ruby_start-block"> </span><span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>size</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="constant constant_numeric constant_numeric_ruby">3</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>class</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>small<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span> <span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_ruby">}</span> <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span>
<span class='linenum'>   43</span>     <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%=</span> form<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>input <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>cost_price</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>label</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="constant constant_language constant_language_ruby">true</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>mask</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>decimal</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span>
<span class='linenum'>   44</span>                                 <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>input_html</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_ruby">{</span><span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>size</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="constant constant_numeric constant_numeric_ruby">5</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>class</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>small<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span><span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_ruby">}</span> <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span>
<span class='linenum'>   45</span>     <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%=</span> form<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>input <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>retail_price</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>label</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="constant constant_language constant_language_ruby">true</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>mask</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>decimal</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span>
<span class='linenum'>   46</span>                                 <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>input_html</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_ruby">{</span><span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>size</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="constant constant_numeric constant_numeric_ruby">5</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>class</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="string string_quoted string_quoted_double string_quoted_double_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">"</span>small<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">"</span></span><span class="punctuation punctuation_section punctuation_section_scope punctuation_section_scope_ruby">}</span> <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span>
<span class='linenum'>   47</span>     <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%=</span> form<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>input <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>description</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>label</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="constant constant_language constant_language_ruby">true</span> <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span>
<span class='linenum'>   48</span>     <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%=</span> form<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>buttons <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>commit</span> <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span>
<span class='linenum'>   49</span>   <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%</span> <span class="keyword keyword_control keyword_control_ruby">end</span> <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span>
<span class='linenum'>   50</span>
<span class='linenum'>   51</span> <span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%</span> <span class="keyword keyword_control keyword_control_ruby">end</span> <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span>
<span class='linenum'>   52</span> <span class="meta meta_tag meta_tag_block meta_tag_block_any meta_tag_block_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_block entity_name_tag_block_any entity_name_tag_block_any_html">div</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span></span></span></pre>
<p>Vejam que para o exemplo eu estou usando o formtastic, por isso o formulário um pouco diferente do convencional.</p>
<p>Lembre sempre de setar o método no routes.rb também</p>
<pre>map.resources :products, :collection =&gt; { :ajax_load_sublinhas =&gt; :get }</pre>
<p>Vejam que temos muita liberdade para fazer a coisa do nosso jeito, esse foi só um exemplo bem simples de selects dinâmicos, mas o leque de coisas que podemos fazer é o quanto a nossa imaginação permitir.</p>
<p>Qualquer dúvida é só comentar.</p>
<p>This is it!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diretoefacil.com.br/2009/12/09/rails-e-javascript-escrevendo-seu-proprio-javascript/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Livro grátis! Ruby on Rails 2.2 &#8211; O que há de novo?</title>
		<link>http://www.diretoefacil.com.br/2009/01/19/livro-rails-22-free/</link>
		<comments>http://www.diretoefacil.com.br/2009/01/19/livro-rails-22-free/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 17:08:30 +0000</pubDate>
		<dc:creator>Márcio Gasparotto</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://www.diretoefacil.com.br/?p=72</guid>
		<description><![CDATA[O Carlos Bandro liberou a versão em português do livro Ruby on Rails 2.2 &#8211; o que há de novo? para download, &#8220;di grátis&#8221;, isso mesmo free! Eu já tinha adquirido o mesmo na data do lançamento junto com o (&#8230;)</p><p><a href="http://www.diretoefacil.com.br/2009/01/19/livro-rails-22-free/">Read the rest of this entry &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img title="cover-book-blog" src="http://www.diretoefacil.com.br/wp-content/uploads/2008/10/cover-book-blog-300x233.jpg" alt="cover-book-blog" width="300" height="233" /></p>
<p>O Carlos Bandro liberou a versão em português do livro Ruby on Rails 2.2 &#8211; o que há de novo? para download, &#8220;di grátis&#8221;, isso mesmo free!</p>
<p>Eu já tinha adquirido o mesmo na data do lançamento junto com o screencast, e até ja tinha dado a dica <a href="http://www.diretoefacil.com.br/2008/10/27/whats-new-in-rails-2-2/" target="_blank">aqui mesmo</a>.</p>
<p>Parabéns Carlos pela iniciativa!</p>
<p><a href="http://www.nomedojogo.com/wp-content/uploads/2009/01/ruby-on-rails-2-2_whats-new_br.pdf" target="_blank">Link para download</a></p>
<p><a href="http://www.nomedojogo.com/2009/01/19/livro-gratis-ruby-on-rails-22-o-que-ha-de-novo/" target="_blank">Link do post no blog do Carlos</a></p>
<p>Abraço!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diretoefacil.com.br/2009/01/19/livro-rails-22-free/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>(Rails + Merb) Mais uma vez os rubistas saem na frente&#8230;</title>
		<link>http://www.diretoefacil.com.br/2008/12/24/rails-merb-mais-uma-vez-os-rubistas-saem-na-frente/</link>
		<comments>http://www.diretoefacil.com.br/2008/12/24/rails-merb-mais-uma-vez-os-rubistas-saem-na-frente/#comments</comments>
		<pubDate>Wed, 24 Dec 2008 20:28:16 +0000</pubDate>
		<dc:creator>Márcio Gasparotto</dc:creator>
				<category><![CDATA[merb]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://www.diretoefacil.com.br/?p=54</guid>
		<description><![CDATA[Eu sou uma pessoa a favor da diversidade, acho muito bom podermos escolher entre esse ou aquele, gostar mais disto do que daquilo, ter que fazer uma escolha nos obriga a tomar uma decisão, faz com que paremos e pensamos (&#8230;)</p><p><a href="http://www.diretoefacil.com.br/2008/12/24/rails-merb-mais-uma-vez-os-rubistas-saem-na-frente/">Read the rest of this entry &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Eu sou uma pessoa a favor da diversidade, acho muito bom podermos escolher entre esse ou aquele, gostar mais disto do que daquilo, ter que fazer uma escolha nos obriga a tomar uma decisão, faz com que paremos e pensamos se o que estamos optando realmente é o melhor para o momento.</p>
<p>No desenvolvimento web não é diferente, temos muitas opções de linguagens, bibliotecas javascripts, frameworks, etc.</p>
<p>Mas  a diversidade que eu defendi no primeiro parágrafo começou a jogar contra quando o assunto é frameworks web, os últimos anos foi um festival de <span style="text-decoration: line-through;">aberrações</span> frameworks pipocando de tudo quanto é lado, alguem arrisca dizer quantos frameworks existe hoje em PHP, Java, Ruby ou qualquer outra linguagem?</p>
<p>Perdi a conta de quantos posts eu vi pela net a fora com o título &#8220;Faça seu próprio web framework  (linguagem que vc escolher) em 3 passos&#8221;.</p>
<p>É aqui, exatamente neste ponto, onde tem um monte de gente indo cada um para um lado que os &#8220;rubistas&#8221; saem na frente, pararam de &#8220;espalhar&#8221; e decidiram se &#8220;juntar&#8221;, porque aquele ditado que diz:  &#8220;antes só do que mal acompanhado&#8221; é balela, eu prefiro aquele que diz: &#8220;duas cabeças pensam melhor do que uma&#8221;, ou ainda: &#8220;é melhor serem dois do que um, pois se um cair o outro ajuda a levantar&#8221;.</p>
<p>Nesse ponto a união do Rails com o Merb (os dois maiores frameworks escritos em Ruby) foi um grande passo em direção a algo melhor, algo que será feito por mais pessoas, com mais idéias e ideais, mais gente pensando na melhor forma de resolver um determinado problema.</p>
<p>Por que ficar cada um de um lado investindo tempo, estudo, pesquisas e esforços pra no final fazerem a mesma coisa, muitas vezes quase do mesmo jeito?</p>
<p>Estou muito otimista em relação a esta fusão, e que isso sirva de <span style="text-decoration: line-through;">lição</span> insentivo para outros &#8220;core teams&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diretoefacil.com.br/2008/12/24/rails-merb-mais-uma-vez-os-rubistas-saem-na-frente/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Page.reload com o jrails</title>
		<link>http://www.diretoefacil.com.br/2008/11/26/pagereload-with-jrails/</link>
		<comments>http://www.diretoefacil.com.br/2008/11/26/pagereload-with-jrails/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 14:33:19 +0000</pubDate>
		<dc:creator>Márcio Gasparotto</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[dica]]></category>
		<category><![CDATA[jrails]]></category>

		<guid isPermaLink="false">http://www.diretoefacil.com.br/?p=49</guid>
		<description><![CDATA[No rails 2.2 foi adicionado um novo helper para os templates .rjs o reload, pra quem assim como eu, usa o jrails para trocar o prototype pelo jquery fica essa dica, pois até o momento pessoal do jrails não atualizou (&#8230;)</p><p><a href="http://www.diretoefacil.com.br/2008/11/26/pagereload-with-jrails/">Read the rest of this entry &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>No rails 2.2 foi adicionado um novo helper para os templates .rjs o reload, pra quem assim como eu, usa o jrails para trocar o prototype pelo jquery fica essa dica, pois até o momento pessoal do jrails não atualizou o mesmo, portanto se você chamar o page.reload usando o jrails vai quebrar.</p>
<p>Para solucionar o problema é simples, basta incluir o codigo abaixo no arquivo jrails.rb (vendor/plugins/jrails/lib/jrails.rb) dentro da Classe JavaScriptGenerator e do Módulo GeneratorMethods.</p>
<p><script src="http://gist.github.com/29396.js"></script></p>
<p>Abraço!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diretoefacil.com.br/2008/11/26/pagereload-with-jrails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu 8.10 + Ruby + Rails + Gedit + Git = Ótimo ambiente!</title>
		<link>http://www.diretoefacil.com.br/2008/10/31/ubuntu-810-rails-gedit/</link>
		<comments>http://www.diretoefacil.com.br/2008/10/31/ubuntu-810-rails-gedit/#comments</comments>
		<pubDate>Fri, 31 Oct 2008 15:46:17 +0000</pubDate>
		<dc:creator>Márcio Gasparotto</dc:creator>
				<category><![CDATA[Gedit]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[ubuntu intrepid]]></category>

		<guid isPermaLink="false">http://www.diretoefacil.com.br/?p=39</guid>
		<description><![CDATA[Ontem (30-10-2008) foi liberado o Ubuntu 8.10 (Intrepid Ibex), e eu como sempre não aguento esperar,  desta vez eu já vinha me preparando (fazendo backps, etc..) pra formatar minha máquina. Foi só baixar o .iso queimar no cd colocar no (&#8230;)</p><p><a href="http://www.diretoefacil.com.br/2008/10/31/ubuntu-810-rails-gedit/">Read the rest of this entry &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Ontem (30-10-2008) foi liberado o <a href="http://www.ubuntu.com/" target="_blank">Ubuntu 8.10 (Intrepid Ibex)</a>, e eu como sempre não aguento esperar,  desta vez eu já vinha me preparando (fazendo backps, etc..) pra formatar minha máquina. Foi só baixar o .iso queimar no cd colocar no drive e mais uns 20 minutos o Intred já estava rodando.</p>
<p><strong>1 etapa: Configurações Básicas do sistema</strong></p>
<p>Eu sempre instalo as bibliotecas e programas para áudio, video, gerenciador de clipboard, etc&#8230;mas isso era meio chato, mas isso já era! O <a href="http://hamacker.wordpress.com/2008/10/29/o-script-ubuntu-perfeito-esta-concluido/" target="_blank">Hamacker fez um script</a> que faz tudo isso, você só precisa selecionar o que quer e pronto! Parabéns Hamacker pelo ótimo trabalho!</p>
<p><strong>2 etapa: Instalando o Ruby e o Rails<a href="http://www.rubyhead.com/2008/04/25/installing-ruby-rails-on-ubuntu-804-hardy-heron/" target="_blank"></a></strong></p>
<p>a) Abra o terminal e execute o comando:</p>
<div class="codecolorer-container text vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo apt-get install ruby irb ri rdoc ruby1.8-dev libzlib-ruby libyaml-ruby libreadline-ruby libncurses-ruby libcurses-ruby libruby libruby-extras libfcgi-ruby1.8 build-essential libopenssl-ruby libdbm-ruby libdbi-ruby libdbd-sqlite3-ruby libsqlite3-dev libsqlite3-ruby libxml-ruby libxml2-dev</div></td></tr></tbody></table></div>
<p>b) Baixe a ultima versão do <a href="http://rubyforge.org/projects/rubygems/" target="_blank">rubygem</a> (neste data é a 1.3.1), extraia em um diretório, entre nesse diretorio através do terminal (cd diretorioondeextrai) e execute o seguinte comando:</p>
<div class="codecolorer-container text vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo ruby setup.rb</div></td></tr></tbody></table></div>
<p>c) Agora vamos instalar o Rails, no terminal execute:</p>
<div class="codecolorer-container text vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo gem install rails</div></td></tr></tbody></table></div>
<p>E depois</p>
<div class="codecolorer-container text vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo gem install sqlite3-ruby mongrel capistrano</div></td></tr></tbody></table></div>
<p>d) Agora vamos instalar o mysql e suas bibliotecas, o instalador pedirá pra você escolher uma senha para o usuário root do mysql, eu deixo em branco, pois só uso minha maquina pra desenvolvimento, mas se quiser é só digitar a senha que preferir, no caso de maquinas de produção, pelo amor de Deus, você DEVE por uma senha&#8230;rs.</p>
<div class="codecolorer-container text vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo apt-get install mysql-server mysql-client libdbd-mysql-ruby libmysqlclient15-dev</div></td></tr></tbody></table></div>
<p>Tive por base <a href="http://www.rubyhead.com/2008/04/25/installing-ruby-rails-on-ubuntu-804-hardy-heron/" target="_blank">este post</a> que era para o ubuntu 8.04. Pronto! neste momento seu ambiente ruby, rails e mysql já está configurado, vamos agora ajustar o gedit.</p>
<p><strong>3 etapa: Instalando os plugins para o Gedit</strong></p>
<p>O Gedit vem instalado por padrão no ubuntu/gnome, entáo só vamos incrementá-lo.</p>
<p>a) vamos começar instalando um pacote padrão de plugins</p>
<div class="codecolorer-container text vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo apt-get install gedit-plugins</div></td></tr></tbody></table></div>
<p>b) Agora vamos baixar o <a href="http://github.com/lexrupy/gmate/tree/master" target="_blank">Gmate</a>, criado pelo <a href="http://alexandredasilva.wordpress.com/" target="_blank">Alexandre</a>, que recomendo a todos que usam o gedit e rails acompanharem pois ele tem feito muita coisa legal, fica aqui também os meus parbéns para o <a href="http://alexandredasilva.wordpress.com/" target="_blank">Alexandre</a>.</p>
<p>Na página do <a href="http://github.com/lexrupy/gmate/tree/master" target="_blank">Gmate</a> no github tem as instruções para a instalação do mesmo. Outro plugin que eu sempre instalo e não está no gmate é o <a href="http://code.google.com/p/advanced-bookmarks-gedit-plugin/" target="_blank">Advanced Bookmarks</a> (no final da página mostra como instalar).</p>
<p>LEMBRE-SE: para ativar esses plugins e ajustar o visual e as demais configurações do Gedit você deve clicar em Editar-&gt;Preferências ai você poderá ajustar da sua maneira.</p>
<p>d) E tem mais, segue os links para instalar o <a href="http://alexandredasilva.wordpress.com/2008/06/15/notificacoes-de-testes-novidades/" target="_blank">notificador de testes (autotest)</a> e <a href="http://alexandredasilva.wordpress.com/2008/05/22/fonte-monaco-no-ubuntugedit/" target="_blank">melhorar a aparencia da famosa fonte Monaco no Ubuntu/Gedit</a>.</p>
<p>UPDATE: <span style="text-decoration: underline;"><strong>Instalando fonts:</strong></span> Uma das maneiras de instalar fonts no ubuntu é criar um diretório chamado .fonts na pasta home/seunomedeusuario e colocolar as fontes que deseja dentro dele, atenção para o . (ponto) antes do nome fonts, isso significa que o diretório será oculto e da próxima vez você não o verá por padrão, mas basta dar um ctrl+h que todos os diretórios ocultos aparecerão inclusive o .fonts é claro&#8230;.dããã.</p>
<p><strong>4 etapa: Instalando mais ferramentas (Git, Subversion, etc)</strong></p>
<p>a) Instalar o git.</p>
<div class="codecolorer-container text vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo apt-get install git-core git-doc git-svn git-gui gitk</div></td></tr></tbody></table></div>
<p>git-svn é para integração com repositórios subversion, e git-gui e gitk são front-end para o git no caso você poderia escolher apenas um.</p>
<p>b) Instalar o subversion</p>
<div class="codecolorer-container text vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo apt-get install subversion subversion-tools</div></td></tr></tbody></table></div>
<p>c) Front-end para o mysql</p>
<div class="codecolorer-container text vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sudo apt-get install mysql-admin mysql-query-browser</div></td></tr></tbody></table></div>
<p><span style="color: #993300;"><strong>PRONTO!</strong> É isso, epero que ajude, e quem tiver dúvidas ou sugestões é só enviar. Abraço!</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.diretoefacil.com.br/2008/10/31/ubuntu-810-rails-gedit/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails 2.2 &#8211; O que há de novo</title>
		<link>http://www.diretoefacil.com.br/2008/10/27/whats-new-in-rails-2-2/</link>
		<comments>http://www.diretoefacil.com.br/2008/10/27/whats-new-in-rails-2-2/#comments</comments>
		<pubDate>Mon, 27 Oct 2008 21:11:36 +0000</pubDate>
		<dc:creator>Márcio Gasparotto</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[livro]]></category>

		<guid isPermaLink="false">http://www.diretoefacil.com.br/?p=35</guid>
		<description><![CDATA[Acabei de adquirir o livro Ruby on Rails 2.2 &#8211; O que há de novo, e aproveito para parabenizar o Carlos Brando, pelo excelente trabalho. Parabéns Carlos! Só li umas 15 ou 20 páginas ainda, mas já vi muita coisa (&#8230;)</p><p><a href="http://www.diretoefacil.com.br/2008/10/27/whats-new-in-rails-2-2/">Read the rest of this entry &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://envycasts.com/" target="_blank"><img class="size-medium wp-image-36 aligncenter" title="cover-book-blog" src="http://www.diretoefacil.com.br/wp-content/uploads/2008/10/cover-book-blog-300x233.jpg" alt="" width="300" height="233" /></a></p>
<p>Acabei de adquirir o livro <a href="http://envycasts.com/" target="_blank">Ruby on Rails 2.2 &#8211; O que há de novo</a>, e aproveito para parabenizar o <a href="http://www.nomedojogo.com" target="_blank">Carlos Brando</a>, pelo excelente trabalho. Parabéns Carlos!</p>
<p>Só li umas 15 ou 20 páginas ainda, mas já vi muita coisa legal, como especificar conditions usando hash e as mudanças no método validates_length_of.</p>
<p>Fica aqui a dica, comprei o pacote contendo o livro e o screencast por $16,00. Na cotação de hoje saiu por apenas R$36,80 o que acho que é até um valor simbólico pela qualidade e importância do conteúdo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diretoefacil.com.br/2008/10/27/whats-new-in-rails-2-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Search + params + will_paginate</title>
		<link>http://www.diretoefacil.com.br/2008/10/26/search-params-will_paginate/</link>
		<comments>http://www.diretoefacil.com.br/2008/10/26/search-params-will_paginate/#comments</comments>
		<pubDate>Sun, 26 Oct 2008 18:12:12 +0000</pubDate>
		<dc:creator>Márcio Gasparotto</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[will_paginate]]></category>

		<guid isPermaLink="false">http://www.diretoefacil.com.br/?p=18</guid>
		<description><![CDATA[Depois que iniciei meu curso de ruby on rails na e-genial ministrado pelo Carlos Brando, tenho me dedicado ainda mais em conhecer e me aprofundar em rails, começar a fazer projetos realmente legais com a ferramenta e deixar de ser (&#8230;)</p><p><a href="http://www.diretoefacil.com.br/2008/10/26/search-params-will_paginate/">Read the rest of this entry &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Depois que iniciei meu curso de ruby on rails na e-genial ministrado pelo <a href="http://www.nomedojogo.com/" target="_blank">Carlos Brando</a>, tenho me dedicado ainda mais em conhecer e me aprofundar em rails, começar a fazer projetos realmente legais com a ferramenta e deixar de ser apenas mais um eterno iniciante ou um programador mediocre&#8230;.</p>
<p>Esses dias estava trabalhando em um projeto pessoal, em rails é claro&#8230;rs, e precisei implantar uma busca no meu sistema, algo trivial, mas ai fui incrementar, paginar os resultados no estilo dig, etc&#8230; Nesse ponto tive alguns problemas com as rotas e na passagem de parâmetros, ai resolvi fazer esse mini tutorial de como resolvi o problema.</p>
<p>Se alguem conhecer uma solução melhor comenta ai.</p>
<p>Bem, vamos lá&#8230; Para paginar registros eu já estava usando o <a title="Will Paginate" href="http://github.com/mislav/will_paginate/tree/master" target="_blank">will_paginate</a>, e minha solução ficou da seguinte maneira:</p>
<p>No meu controller (categorias_controller.rb) eu adicionei o seguinte metodo:</p>
<p><script src="http://gist.github.com/19916.js"></script></p>
<p>Como estava implantando o formulário de busca em uma tela já pronta e iria repetir esse form em vários lugares, criei um partial para o formulário da busca (_busca.html.erb).</p>
<p><script src="http://gist.github.com/19917.js"></script></p>
<p>A view (busca.html.erb) que apresenta os resultados ficou da seguinte maneira:</p>
<p><script src="http://gist.github.com/19919.js"></script></p>
<p>Observem a linha 26, quando chamo o will_paginate preciso passar como parâmetro a variável query que contem a expressão que esta sendo buscada:</p>
<p><script src="http://gist.github.com/19922.js"></script></p>
<p>No meu arquivo routes.rb eu adicionei uma collection no resouce categorias.</p>
<p><script src="http://gist.github.com/19923.js"></script></p>
<p>Veja que adicionei a :busca como sendo mais um resource de :categorias, o parametro :any significa que esse resource responderá  :get/:post/:put/:delete, eu poderia simplesmente colocar :get, uma vez que o parâmetro nesse caso só é passado via url, mas deixei como :any pra exemplificar.</p>
<p>Ou coisa, pra não precisar ficar definindo os labels do will_paginate em todo os lugares, acrescentei no final(depois do ultimo end) do meu arquivo environment.rb as seguintes linhas:</p>
<p><script src="http://gist.github.com/19924.js"></script></p>
<p>Ai foi só reiniciar o server e partir pro abraço!</p>
<p>Abraço a todos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.diretoefacil.com.br/2008/10/26/search-params-will_paginate/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 1.215 seconds -->

