<?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>PRSoluções &#187; Ruby on Rails</title>
	<atom:link href="http://www.prsolucoes.com/blog/category/ruby-on-rails/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.prsolucoes.com/blog</link>
	<description>Soluções Inteligentes</description>
	<lastBuildDate>Wed, 18 Aug 2010 22:15:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Como usar o Brazilian-Rails como gem ou plugin</title>
		<link>http://www.prsolucoes.com/blog/ruby-on-rails/como-usar-o-brazilian-rails-como-gem-ou-plugin/</link>
		<comments>http://www.prsolucoes.com/blog/ruby-on-rails/como-usar-o-brazilian-rails-como-gem-ou-plugin/#comments</comments>
		<pubDate>Sun, 20 Sep 2009 04:29:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.prsolucoes.com/blog/?p=423</guid>
		<description><![CDATA[Olá, A Paz do Senhor primeiramente. Escrevo este post por não encontrar um tutorial/artigo/blog que explique com detalhes este assunto. Todos nós, desenvolvedores em ruby on Rails sabemos que existe GEM e PLUGIN, mas qual a diferença básica? Gem &#8211; Quando instalada, fica disponível para qualquer projeto do ambiente onde está sendo executada as aplicações. [...]]]></description>
			<content:encoded><![CDATA[<p>Olá,</p>
<p>A Paz do Senhor primeiramente.</p>
<p>Escrevo este post por não encontrar um tutorial/artigo/blog que explique com detalhes este assunto.</p>
<p>Todos nós, desenvolvedores em ruby on Rails sabemos que existe <strong>GEM</strong> e <strong>PLUGIN</strong>, mas qual a diferença básica?</p>
<blockquote><p>Gem &#8211; Quando instalada, fica disponível para qualquer projeto do ambiente onde está sendo executada as aplicações.</p></blockquote>
<blockquote><p>Plugin &#8211; Quando instalado, fica disponível somente para a aplicação em que foi instalado, por isso o comando deve ser executado dentro da pasta raiz do projeto.</p></blockquote>
<p>Agora que já temos uma idéia melhor sobre o assunto, vamos instalar o <strong>brazilian-rails</strong> como <strong>gem</strong>. Execute o comando abaixo em qualquer lugar no <strong>terminal/console</strong>.</p>
<blockquote><p>gem install brazilian-rails</p></blockquote>
<p>Esse comando instala a <strong>gem</strong> e ficará disponível para <strong>todas as aplicações</strong> do ambiente/servidor em que estiver.</p>
<p>Para instalar como <strong>plugin</strong>, execute o comando abaixo, dentro da pasta da sua aplicação, <strong>na raiz</strong>:</p>
<blockquote><p>ruby script/plugin install svn://rubyforge.org/var/svn/brazilian-rails</p></blockquote>
<p>Uma outra coisa que dificilmente explicam é que quando você usa <strong>gem</strong>, você precisa ir no seu <strong>enviroment.rb</strong> e adicionar as linhas:</p>
<blockquote><p>#brazilian-rails<br />
require &#8216;brstring&#8217;<br />
require &#8216;brdata&#8217;<br />
require &#8216;brdinheiro&#8217;<br />
require &#8216;brI18n&#8217;</p></blockquote>
<p>&#8230; e outras que você precisar</p>
<p>Já quando você usa como <strong>plugin</strong>, você vai no <strong>enviroment </strong>e coloca as linhas:</p>
<blockquote><p>Rails::Initializer.run do |config|<br />
config.plugins = [:all]<br />
config.i18n.default_locale = &#8220;pt-BR&#8221;<br />
end</p></blockquote>
<p>Ou seja, se usar <strong>gem</strong> você poe o <strong>require</strong> para sua aplicação saber que você está incluindo estes arquivos da <strong>gem</strong> e como <strong>plugin </strong>apenas diga que você quer usar todos os <strong>plugins</strong> da pasta de <strong>plugins.</strong></p>
<p>Eu, Paulo, prefiro usar sempre como <strong>plugin</strong>, pois deixa a sua aplicação independente de servidor e não precisa ficar instalando <strong>gems</strong>.<strong><br />
</strong></p>
<p>Espero que tenham gostado <img src='http://www.prsolucoes.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.prsolucoes.com/blog/ruby-on-rails/como-usar-o-brazilian-rails-como-gem-ou-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Passando dados do form para os objetos no Ruby on Rails</title>
		<link>http://www.prsolucoes.com/blog/ruby-on-rails/passando-dados-do-form-para-os-objetos-no-ruby-on-rails/</link>
		<comments>http://www.prsolucoes.com/blog/ruby-on-rails/passando-dados-do-form-para-os-objetos-no-ruby-on-rails/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 05:53:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[objeto]]></category>
		<category><![CDATA[passagem]]></category>
		<category><![CDATA[scaffolding]]></category>

		<guid isPermaLink="false">http://www.prsolucoes.com/blog/?p=341</guid>
		<description><![CDATA[Olá, Hoje vos escrevo sobre algo básico, porém útil, mas que ninguém que trabalha com Rails soube me responder. Trata-se da passagem de todos os campos do form direto para um objeto, mas tudo isso em 1 linha de código, Ohhhh!! Esse código é gerado pelo scaffolding do Rails, mas fazendo o administrativo do site [...]]]></description>
			<content:encoded><![CDATA[<p>Olá,</p>
<p>Hoje vos escrevo sobre algo básico, porém útil, mas que ninguém que trabalha com Rails soube me responder.</p>
<p>Trata-se da passagem de todos os campos do form direto para um objeto, mas tudo isso em 1 linha de código, Ohhhh!!</p>
<p>Esse código é gerado pelo scaffolding do Rails, mas fazendo o administrativo do site na mão (pois o scaffolding é básico e ninguém realmente usa isso) precisei disso, de passar tudo direto para o objeto sem precisar escrever atributo por atributo, então segue ai um exemplo da estrutura que os campos do form precisam ter para analisar-mos.</p>
<blockquote><p>&lt;input name=&#8221;id&#8221; value=&#8221;150&#8243; type=&#8221;hidden&#8221; /&gt;</p>
<p>&lt;input name=&#8221;dados[nome]&#8221; value=&#8221;teste&#8221; type=&#8221;text&#8221; maxlenght=&#8221;50&#8243; /&gt;</p>
<p>&lt;input name=&#8221;dados[ativo]&#8221; value=&#8221;1&#8243; type=&#8221;checkbox&#8221; /&gt;</p></blockquote>
<p>Vamos supor que tenhamos uma classe chamada <strong>Cliente</strong> que possui os atributos:</p>
<blockquote><p>nome [varchar: 50]</p>
<p>ativo [tinyint: 1]</p></blockquote>
<p>Para jogar-mos esses dois atributos para uma instância da classe <strong>Cliente</strong> e gravar no banco precisamos fazer assim no Rails:</p>
<blockquote><p>cliente = Cliente.new(params[:dados])</p>
<p>cliente.save</p></blockquote>
<p>e para alterar os atributos de um <strong>Cliente</strong> já existente, usamos:</p>
<blockquote><p>cliente = Cliente.find(params[:id])</p>
<p>cliente.update_attributes(params[:dados])</p>
<p><span style="color: #339966;">#não precisa do cliente.save, pois o método <strong>update_attributes</strong> já faz isso por você</span></p></blockquote>
<p>Agora, a explicação é bem simples, quando você cria um array de campos e cada campo tem o nome de um atributo da classe final, quando você passar este array por parâmetro o Ruby on Rails vai verificar e jogar automaticamente os campos do form para cada atributo do objeto.</p>
<p>Então se tempo no form um campo chamado <strong>dados[nome]</strong> e em nome classe temos o atributo nome, na passagem dos dados automaticamente o atributo nome recebe o valor do campo <strong>dados[nome]</strong>.</p>
<p>Pelo scaffold, ele cria os forms contendo o nome do array sendo o nome da classe, então se você gerar um scaffold para cliente, ele vai gerar os nomes dos campos assim:  <strong>cliente[nome]</strong>, <strong>cliente[ativo]</strong>.</p>
<p>Mas isso pouco importa, pois o nome do array não muda em nada, apenas trocariamos de:</p>
<blockquote><p>Cliente.new(params[:dados])</p></blockquote>
<p>para</p>
<blockquote><p>Cliente.new(params[:cliente])</p></blockquote>
<p>Para economizar trabalho, eu sempre crio os forms com os mesmos nomes de campos, assim quando vou criar um form igual apenas copio as mesmas views e está tudo certo, sei que o nome do array sempre será <strong>dados</strong>, mas isso é de cada um, o importante é entender o funcionamento.</p>
<p>Espero que tenham gostado, pois isso é algo que dificilmente você encontrará explicando por ai, eu mesmo não achei, só testando o scaffold mesmo para notar isso.</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>Estou editando o post pois um amigo (Marcus Vinicus) da lista <a href="http://groups.google.com/group/rails-br" target="_blank"><strong>rails-br</strong></a> me alertou sobre uma forma de <strong>hackearem</strong> sua aplicação através desta facilidade chamada <strong>mass-assignment</strong> que foi explicada acima.</p>
<p>Vou tentar explicar o funcionamento de como alguém pode <strong>burlar</strong> uma aplicação usando o <strong>mass-assignment</strong> e como podemos nos proteger <strong>facilmente</strong> com o Rails.</p>
<p>Bom, como expliquei, os valores dos campos são passados diretamente para o objeto, mas nós só colocamos em nosso <strong>form </strong>os campos <strong>nome </strong>e <strong>ativo</strong>, e se tivessemos um atributo em nossa classe chamado <strong>admin</strong>, ficando assim nossa estrutura:</p>
<blockquote><p>nome [varchar: 50]</p>
<p>ativo [tinyint: 1]</p>
<p>admin [tinyint: 1]</p></blockquote>
<p>Sendo que em nosso form só temos <strong>2 campos</strong> e este campo <strong>admin </strong>nós não usamos ele no <strong>cadastro do registro</strong> nem na<strong> alteração</strong>, pois somente <strong>um usuário é admin</strong> e este usuário é um registro qualquer do nosso banco de dados que tem direito a<strong> fazer tudo</strong> na aplicação, então não precisamos disponibilizar em nosso <strong>form </strong>esse campo para informar se o usuário é <strong>admin</strong> ou não, já que decidimos que em nossa aplicação só tem <strong>1 admin</strong> e ele já está lá com o <strong>valor 1</strong> neste campo da <strong>tabela</strong>.</p>
<p>Mas ai, vamos supor que um engraçadinho, usando o <strong>Firebug do Firefox</strong> editou o <strong>html </strong>e adicionou em nosso form que antes era:</p>
<blockquote><p>&lt;input name=&#8221;dados[nome]&#8221; value=&#8221;teste&#8221; type=&#8221;text&#8221; maxlenght=&#8221;50&#8243; /&gt;</p>
<p>&lt;input name=&#8221;dados[ativo]&#8221; value=&#8221;1&#8243; type=&#8221;checkbox&#8221; /&gt;</p></blockquote>
<p>e <strong>mudou </strong>para:</p>
<blockquote><p>&lt;input name=&#8221;dados[nome]&#8221; value=&#8221;teste&#8221; type=&#8221;text&#8221; maxlenght=&#8221;50&#8243; /&gt;</p>
<p>&lt;input name=&#8221;dados[ativo]&#8221; value=&#8221;1&#8243; type=&#8221;checkbox&#8221; /&gt;</p>
<p>&lt;input name=&#8221;dados[admin]&#8221; value=&#8221;1&#8243; type=&#8221;text&#8221; /&gt;</p></blockquote>
<p>E quando ele fez o<strong> submit no form</strong>, o Rails <strong>jogou tudo pro objeto Cliente</strong>, inclusive o <strong>valor do campo admin</strong>, e com isso atribuiu para o objeto Cliente o <strong>valor 1 para o atributo admin</strong>, fazendo com que aquele usuário seja também um <strong>administrador do sistema</strong> e tenha acesso a <strong>tudo</strong>.</p>
<p>Obviamente, o <strong>Rails </strong>sempre tem seus <strong>métodos de proteção</strong>, e agora vou explicar como permitir somente que<strong> alguns campos</strong> sejam definidos pelo <strong>mass-assignment</strong>.</p>
<p>Para fazer essa façanha <strong>super difícil</strong>, basta na sua classe você especificar assim (com base em nossa classe <strong>Cliente</strong>):</p>
<blockquote><p>class Cliente &lt; ActiveRecord::Base<br />
attr_accessible :nome, :ativo<br />
end</p></blockquote>
<p>Com isso, estamos dizendo que em nossa classe Cliente, somente nos atributos <strong>nome </strong>e <strong>ativo </strong>é permitido usar o mass-assignment ou também podemos <strong>proibir </strong>os campos que<strong> não queremos</strong> que o mass-assignment atribua valores, assim:</p>
<blockquote><p>class Cliente &lt; ActiveRecord::Base<br />
attr_protected :admin<br />
end</p></blockquote>
<p>Assim, estamos definindo em nossa classe <strong>Cliente </strong>que o <strong>campo admin está protegido</strong> e que não se pode usar o <strong>mass-assignment</strong> nele.</p>
<p>Bem simples né? Como tudo no <strong>Rails</strong>.</p>
<p>Obrigado ao Marcus pela dica do <strong>mass-assignment</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prsolucoes.com/blog/ruby-on-rails/passando-dados-do-form-para-os-objetos-no-ruby-on-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criando arquivo de texto (txt) no Ruby on Rails</title>
		<link>http://www.prsolucoes.com/blog/ruby-on-rails/criando-arquivo-de-texto-txt-no-ruby-on-rails/</link>
		<comments>http://www.prsolucoes.com/blog/ruby-on-rails/criando-arquivo-de-texto-txt-no-ruby-on-rails/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 11:18:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[arquivo]]></category>
		<category><![CDATA[file]]></category>
		<category><![CDATA[texto]]></category>
		<category><![CDATA[txt]]></category>

		<guid isPermaLink="false">http://www.prsolucoes.com/blog/?p=339</guid>
		<description><![CDATA[Olá, Assim como pregamos o que vivemos, eu também escrevo o que vivo no dia-a-dia e aprendo com as pessoas. Então, a partir de uma necessidade de um amigo, pesquisei como seria para escrever um arquivo de texto simples, um TXT da vida, com o Ruby on Rails, na verdade só com o Ruby, e [...]]]></description>
			<content:encoded><![CDATA[<p>Olá,</p>
<p>Assim como pregamos o que vivemos, eu também escrevo o que vivo no dia-a-dia e aprendo com as pessoas.</p>
<p>Então, a partir de uma necessidade de um amigo, pesquisei como seria para escrever um arquivo de texto simples, um TXT da vida, com o Ruby on Rails, na verdade só com o Ruby, e encontrei uma solução:</p>
<blockquote><p>nome_arquivo = RAILS_ROOT + &#8216;/pasta/arquivo.txt&#8217;</p>
<p>arquivo = File.open(nome_arquivo, &#8216;wb&#8217;)<br />
arquivo.puts &#8220;nome: Paulo&#8221;<br />
arquivo.close</p></blockquote>
<p>Caso você queira enviar este arquivo para download, existe o comando <strong>send_file</strong> que faz isto para você, assim:</p>
<blockquote><p>#seguindo o exemplo acima</p>
<p>send_file nome_arquivo</p></blockquote>
<p>Mas informações sobre o <strong>send_file</strong>:</p>
<p><a href="http://api.rubyonrails.org/classes/ActionController/Streaming.html" target="_blank">http://api.rubyonrails.org/classes/ActionController/Streaming.html</a></p>
<p>Mas informações sobre a classe <strong>File</strong>:</p>
<p><a href="http://corelib.rubyonrails.org/classes/File.html" target="_blank">http://corelib.rubyonrails.org/classes/File.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.prsolucoes.com/blog/ruby-on-rails/criando-arquivo-de-texto-txt-no-ruby-on-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Brecha de segurança na autenticação do Rails</title>
		<link>http://www.prsolucoes.com/blog/ruby-on-rails/brecha-de-seguranca-na-autenticacao-do-rails/</link>
		<comments>http://www.prsolucoes.com/blog/ruby-on-rails/brecha-de-seguranca-na-autenticacao-do-rails/#comments</comments>
		<pubDate>Sun, 07 Jun 2009 04:17:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[autenticação]]></category>
		<category><![CDATA[falha]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[segurança]]></category>

		<guid isPermaLink="false">http://www.prsolucoes.com/blog/?p=280</guid>
		<description><![CDATA[Olá, Descoberta uma falha na autenticação no rails. Link: http://n8.tumblr.com/post/117477059/security-hole-found-in-rails-2-3s]]></description>
			<content:encoded><![CDATA[<p>Olá,</p>
<p>Descoberta uma falha na autenticação no rails.</p>
<p>Link: <a href="http://n8.tumblr.com/post/117477059/security-hole-found-in-rails-2-3s" target="_blank">http://n8.tumblr.com/post/117477059/security-hole-found-in-rails-2-3s</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.prsolucoes.com/blog/ruby-on-rails/brecha-de-seguranca-na-autenticacao-do-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como alterar no rails o nome da tabela do seu modelo</title>
		<link>http://www.prsolucoes.com/blog/ruby-on-rails/como-alterar-no-rails-o-nome-da-tabela-do-seu-modelo/</link>
		<comments>http://www.prsolucoes.com/blog/ruby-on-rails/como-alterar-no-rails-o-nome-da-tabela-do-seu-modelo/#comments</comments>
		<pubDate>Thu, 07 May 2009 10:32:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[altera nome da tabela padrão]]></category>
		<category><![CDATA[mudar tabela]]></category>
		<category><![CDATA[table name]]></category>

		<guid isPermaLink="false">http://www.prsolucoes.com/blog/?p=154</guid>
		<description><![CDATA[Olá, Vou postar hoje uma solução para mais uma necessidade que tive, eu precisava fazer no rails com que fosse ignorado o nome que ele sugere para a tabela um modelo específico, mas como fazer isso de maneira rápida sem precisar alterar todo um mundo de coisas? Eis a solução: No seu modelo coloque: class [...]]]></description>
			<content:encoded><![CDATA[<p>Olá,</p>
<p>Vou postar hoje uma solução para mais uma necessidade que tive, eu precisava fazer no rails com que fosse ignorado o nome que ele sugere para a tabela um modelo específico, mas como fazer isso de maneira rápida sem precisar alterar todo um mundo de coisas?</p>
<p>Eis a solução:</p>
<p>No seu modelo coloque:</p>
<pre>class AnuncioServico &lt; ActiveRecord::Base
  def self.table_name() "anuncios_servicos" end
end</pre>
<p>O que importa na verdade é a linha do meio em negrito, onde ali você define o nome da tabela que você quer.</p>
<p>Abraços e fiquem com Deus.</p>
<p><strong>EDITADO EM 07/09/2009</strong></p>
<p>Seguindo a dica do amigo <a class="url" rel="external nofollow" href="http://forum.ruyonbr.org/forum">Mereghost</a> também é possível fazer de uma forma simplificada ficando assim:</p>
<pre>class AnuncioServicoServico &lt; ActiveRecord::Base
  set_table_name 'anuncios_servicos_servicos'
end</pre>
<p>Com certeza fica bem melhor, obrigado pela ajuda.</p>
<p>Fiquem na paz de Deus.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.prsolucoes.com/blog/ruby-on-rails/como-alterar-no-rails-o-nome-da-tabela-do-seu-modelo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
