<?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>Blog Patrick Espake &#187; helpers</title>
	<atom:link href="http://blog.patrickespake.com/tag/helpers/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.patrickespake.com</link>
	<description>O conhecimento evolui quando é compartilhado!</description>
	<lastBuildDate>Fri, 03 Sep 2010 04:24:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1-alpha</generator>
		<item>
		<title>Ruby on Rails usando strip_tags nos controllers, models e libs</title>
		<link>http://blog.patrickespake.com/2009/06/15/ruby-on-rails-usando-strip_tags-nos-controllers-models-e-libs/</link>
		<comments>http://blog.patrickespake.com/2009/06/15/ruby-on-rails-usando-strip_tags-nos-controllers-models-e-libs/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 19:46:08 +0000</pubDate>
		<dc:creator>patrickespake</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[actioncontroller]]></category>
		<category><![CDATA[actionview]]></category>
		<category><![CDATA[Base]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[config]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[exemplo]]></category>
		<category><![CDATA[helper]]></category>
		<category><![CDATA[helpers]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[implementação]]></category>
		<category><![CDATA[initializers]]></category>
		<category><![CDATA[lib]]></category>
		<category><![CDATA[método]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[new_rails_defaults]]></category>
		<category><![CDATA[public_methods]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[rb]]></category>
		<category><![CDATA[remover]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[sanitize]]></category>
		<category><![CDATA[sanitizehelper]]></category>
		<category><![CDATA[self]]></category>
		<category><![CDATA[string]]></category>
		<category><![CDATA[strip_tags]]></category>
		<category><![CDATA[tags]]></category>
		<category><![CDATA[usando]]></category>
		<category><![CDATA[view]]></category>

		<guid isPermaLink="false">http://blog.patrickespake.com/?p=717</guid>
		<description><![CDATA[O Ruby on Rails possui o métogo strip_tags para remover tags html. Esse método está apenas disponível na camada de view, uma vez que faz parte ActionView::Helpers::SanitizeHelper. Eu não concordo com essa implementação do Rails, acho que deveria ser disponível também na camada de controller e model, onde são os lugares que esse método é [...]]]></description>
			<content:encoded><![CDATA[<p>O Ruby on Rails possui o métogo strip_tags para remover tags html. Esse método está apenas disponível na camada de <strong>view</strong>, uma vez que faz parte <strong>ActionView::Helpers::SanitizeHelper</strong>.</p>
<p>Eu não concordo com essa implementação do Rails, acho que deveria ser disponível também na camada de controller e model, onde são os lugares que esse método é mais útil.</p>
<p>Para implementar o strip_tags nos controllers, models e libs, nós podemos adicionar esse método na classe <strong>String</strong>, desta forma estará disponível em qualquer lugar.</p>
<p>Abra o arquivo <strong>config/initializers/new_rails_defaults.rb</strong>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># Be sure to restart your server when you modify this file.</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># These settings change the behavior of Rails 2 apps and will be defaults</span>
<span style="color:#008000; font-style:italic;"># for Rails 3. You can remove this initializer when Rails 3 is released.</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#9966CC; font-weight:bold;">defined</span>?<span style="color:#006600; font-weight:bold;">&#40;</span>ActiveRecord<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#008000; font-style:italic;"># Include Active Record class name as root for JSON serialized output.</span>
  <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">include_root_in_json</span> = <span style="color:#0000FF; font-weight:bold;">true</span>
&nbsp;
  <span style="color:#008000; font-style:italic;"># Store the full class name (including module namespace) in STI type column.</span>
  <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">store_full_sti_class</span> = <span style="color:#0000FF; font-weight:bold;">true</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Use ISO 8601 format for JSON serialized times and dates.</span>
ActiveSupport.<span style="color:#9900CC;">use_standard_json_time_format</span> = <span style="color:#0000FF; font-weight:bold;">true</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Don't escape HTML entities in JSON, leave that for the #json_escape helper.</span>
<span style="color:#008000; font-style:italic;"># if you're including raw json in an HTML page.</span>
ActiveSupport.<span style="color:#9900CC;">escape_html_entities_in_json</span> = <span style="color:#0000FF; font-weight:bold;">false</span></pre></td></tr></table></div>

<p>Adicione no final do arquivo as linhas:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> <span style="color:#CC0066; font-weight:bold;">String</span>
  <span style="color:#9966CC; font-weight:bold;">def</span> strip_tags
    <span style="color:#6666ff; font-weight:bold;">ActionController::Base</span>.<span style="color:#9900CC;">helpers</span>.<span style="color:#9900CC;">strip_tags</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">self</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>As linhas acima criam o método <strong>strip_tags</strong> na classe <strong>String</strong>.</p>
<p>Ficando o arquivo completo assim:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># Be sure to restart your server when you modify this file.</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># These settings change the behavior of Rails 2 apps and will be defaults</span>
<span style="color:#008000; font-style:italic;"># for Rails 3. You can remove this initializer when Rails 3 is released.</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#9966CC; font-weight:bold;">defined</span>?<span style="color:#006600; font-weight:bold;">&#40;</span>ActiveRecord<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#008000; font-style:italic;"># Include Active Record class name as root for JSON serialized output.</span>
  <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">include_root_in_json</span> = <span style="color:#0000FF; font-weight:bold;">true</span>
&nbsp;
  <span style="color:#008000; font-style:italic;"># Store the full class name (including module namespace) in STI type column.</span>
  <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>.<span style="color:#9900CC;">store_full_sti_class</span> = <span style="color:#0000FF; font-weight:bold;">true</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Use ISO 8601 format for JSON serialized times and dates.</span>
ActiveSupport.<span style="color:#9900CC;">use_standard_json_time_format</span> = <span style="color:#0000FF; font-weight:bold;">true</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Don't escape HTML entities in JSON, leave that for the #json_escape helper.</span>
<span style="color:#008000; font-style:italic;"># if you're including raw json in an HTML page.</span>
ActiveSupport.<span style="color:#9900CC;">escape_html_entities_in_json</span> = <span style="color:#0000FF; font-weight:bold;">false</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> <span style="color:#CC0066; font-weight:bold;">String</span>
  <span style="color:#9966CC; font-weight:bold;">def</span> strip_tags
    <span style="color:#6666ff; font-weight:bold;">ActionController::Base</span>.<span style="color:#9900CC;">helpers</span>.<span style="color:#9900CC;">strip_tags</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">self</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>Agora reinicie o seu servidor web para pegar essas novas configurações na inicialização da aplicação.</p>
<p>Agora quando você precisar do strip_tags pode usar assim, exemplos:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'title'</span><span style="color:#006600; font-weight:bold;">&#93;</span> = params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'title'</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">strip_tags</span>
&nbsp;
ou
&nbsp;
<span style="color:#006600; font-weight:bold;">&gt;&gt;</span> <span style="color:#996600;">'&lt;b&gt;meu texto&lt;/b&gt;'</span>.<span style="color:#9900CC;">strip_tags</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;meu texto&quot;</span></pre></div></div>

<p>Se você gostou desse texto e acha que ajudou você, me recomende: <a href="http://www.workingwithrails.com/recommendation/new/person/15479-patrick-espake"><img src="http://workingwithrails.com/images/tools/compact-small-button.jpg" alt="Recommend Me" /></a>.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://blog.patrickespake.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.patrickespake.com/2009/06/15/ruby-on-rails-usando-strip_tags-nos-controllers-models-e-libs/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails usando o jQuery ao invés do Prototype</title>
		<link>http://blog.patrickespake.com/2009/06/09/ruby-on-rails-usando-o-jquery-ao-inves-do-prototype/</link>
		<comments>http://blog.patrickespake.com/2009/06/09/ruby-on-rails-usando-o-jquery-ao-inves-do-prototype/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 21:42:19 +0000</pubDate>
		<dc:creator>patrickespake</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[:defaults]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[bibliotecas]]></category>
		<category><![CDATA[efeito]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[funcional]]></category>
		<category><![CDATA[googlecode]]></category>
		<category><![CDATA[heads]]></category>
		<category><![CDATA[helper]]></category>
		<category><![CDATA[helpers]]></category>
		<category><![CDATA[instalação]]></category>
		<category><![CDATA[javascript_include_tag]]></category>
		<category><![CDATA[jquery-ui]]></category>
		<category><![CDATA[jrails]]></category>
		<category><![CDATA[layout]]></category>
		<category><![CDATA[libs]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Prototype]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[Svn]]></category>
		<category><![CDATA[trunk]]></category>

		<guid isPermaLink="false">http://blog.patrickespake.com/?p=686</guid>
		<description><![CDATA[Eu gosto mais do jQuery acho ele mais leve, mais funcional e com efeitos melhores. Vou mostrar como substituir o Prototype e colocar o jQuery no seu lugar. Instalação do plugin jRails: ruby script/plugin install http://ennerchi.googlecode.com/svn/trunk/plugins/jrails No layout da sua aplicação remova o uso do Prototype, remova a linha abaixo, caso ela exista: &#60;%= javascript_include_tag [...]]]></description>
			<content:encoded><![CDATA[<p>Eu gosto mais do jQuery acho ele mais leve, mais funcional e com efeitos melhores.</p>
<p>Vou mostrar como substituir o Prototype e colocar o jQuery no seu lugar.</p>
<p>Instalação do plugin jRails:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">ruby script<span style="color: #000000; font-weight: bold;">/</span>plugin <span style="color: #c20cb9; font-weight: bold;">install</span> http:<span style="color: #000000; font-weight: bold;">//</span>ennerchi.googlecode.com<span style="color: #000000; font-weight: bold;">/</span>svn<span style="color: #000000; font-weight: bold;">/</span>trunk<span style="color: #000000; font-weight: bold;">/</span>plugins<span style="color: #000000; font-weight: bold;">/</span>jrails</pre></div></div>

<p>No layout da sua aplicação remova o uso do Prototype, remova a linha abaixo, caso ela exista:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&lt;%</span>= javascript_include_tag <span style="color:#ff3333; font-weight:bold;">:defaults</span> <span style="color:#006600; font-weight:bold;">%&gt;</span></pre></div></div>

<p>Agora adicionei as bibliotecas javascripts entre as tags heads:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">...
  &lt;head&gt;
    ...
    <span style="color:#006600; font-weight:bold;">&lt;%</span>= javascript_include_tag <span style="color:#996600;">&quot;jquery&quot;</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
    <span style="color:#006600; font-weight:bold;">&lt;%</span>= javascript_include_tag <span style="color:#996600;">&quot;jquery-ui&quot;</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
    <span style="color:#006600; font-weight:bold;">&lt;%</span>= javascript_include_tag <span style="color:#996600;">&quot;jrails&quot;</span> <span style="color:#006600; font-weight:bold;">%&gt;</span>
  &lt;/head&gt;
...</pre></div></div>

<p>Pronto! Fazendo isso o jQuery está disponível e compatível com o Ruby on Rails, ou seja, todos os helpers javascript usarão agora o jQuery como framework javascript.</p>
<p>O plugin jRails sobrescreve os helpers javascript para usar o jQuery.</p>
<p>Se você gostou desse texto e acha que ajudou você, me recomende: <a href="http://www.workingwithrails.com/recommendation/new/person/15479-patrick-espake"><img src="http://workingwithrails.com/images/tools/compact-small-button.jpg" alt="Recommend Me" /></a>.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://blog.patrickespake.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.patrickespake.com/2009/06/09/ruby-on-rails-usando-o-jquery-ao-inves-do-prototype/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails estendendo as migrações com helpers</title>
		<link>http://blog.patrickespake.com/2009/03/24/ruby-on-rails-estendendo-as-migracoes-com-helpers/</link>
		<comments>http://blog.patrickespake.com/2009/03/24/ruby-on-rails-estendendo-as-migracoes-com-helpers/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 13:25:56 +0000</pubDate>
		<dc:creator>patrickespake</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Active Record]]></category>
		<category><![CDATA[activerecord]]></category>
		<category><![CDATA[add constraint]]></category>
		<category><![CDATA[alter table]]></category>
		<category><![CDATA[constraint]]></category>
		<category><![CDATA[create_table]]></category>
		<category><![CDATA[def foreign_key]]></category>
		<category><![CDATA[drop_table]]></category>
		<category><![CDATA[estendo]]></category>
		<category><![CDATA[extend]]></category>
		<category><![CDATA[foreign key]]></category>
		<category><![CDATA[foreign_key]]></category>
		<category><![CDATA[helpers]]></category>
		<category><![CDATA[lib]]></category>
		<category><![CDATA[migrações]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[MigrationHelpers]]></category>
		<category><![CDATA[migrations]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[models]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[require]]></category>
		<category><![CDATA[self.down]]></category>
		<category><![CDATA[self.up]]></category>

		<guid isPermaLink="false">http://patrickespake.wordpress.com/?p=502</guid>
		<description><![CDATA[É muito comum termos nas migrações instruções sql para criar chaves estrangeiras e o rails não tem métodos para criar-las. Por exemplo: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 class CreateGameTeams &#60; ActiveRecord::Migration def self.up create_table :game_teams do &#124;t&#124; t.references :team, :null =&#62; false [...]]]></description>
			<content:encoded><![CDATA[<p>É muito comum termos nas migrações instruções sql para criar chaves estrangeiras e o rails não tem métodos para criar-las.</p>
<p>Por exemplo:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> CreateGameTeams <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Migration</span>
  <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">up</span>
    create_table <span style="color:#ff3333; font-weight:bold;">:game_teams</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>t<span style="color:#006600; font-weight:bold;">|</span>
      t.<span style="color:#9900CC;">references</span> <span style="color:#ff3333; font-weight:bold;">:team</span>, <span style="color:#ff3333; font-weight:bold;">:null</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">false</span>
      t.<span style="color:#9900CC;">references</span> <span style="color:#ff3333; font-weight:bold;">:game</span>, <span style="color:#ff3333; font-weight:bold;">:null</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">false</span>
      t.<span style="color:#9900CC;">timestamps</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
    execute <span style="color:#996600;">&quot;ALTER TABLE game_teams ADD CONSTRAINT fk_game_team_teams FOREIGN KEY (team_id) REFERENCES teams (id) ON DELETE CASCADE ON UPDATE
 CASCADE&quot;</span>
    execute <span style="color:#996600;">&quot;ALTER TABLE game_teams ADD CONSTRAINT fk_game_team_games FOREIGN KEY (game_id) REFERENCES games (id) ON DELETE CASCADE ON UPDATE
 CASCADE&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">down</span>
    drop_table <span style="color:#ff3333; font-weight:bold;">:game_teams</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>Para simplificar mais as coisas, é possível criar helpers e estender as funcionalidades das migrações, é isso que será feito para criar um método que gera as chaves estrangeiras (foreign key).</p>
<p>Faça o seguinte:</p>
<p>No diretório <strong>lib</strong> do projeto crie o arquivo <strong>migration_helpers.rb</strong> com o conteúdo abaixo:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">module</span> MigrationHelpers
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> foreign_key<span style="color:#006600; font-weight:bold;">&#40;</span>from_table, from_column, to_table<span style="color:#006600; font-weight:bold;">&#41;</span>
    constraint_name = <span style="color:#996600;">&quot;fk_#{from_table}_#{from_column}&quot;</span>
&nbsp;
    execute <span style="color:#006600; font-weight:bold;">%</span><span style="color:#006600; font-weight:bold;">&#123;</span>alter table <span style="color:#008000; font-style:italic;">#{from_table} add constraint #{constraint_name} foreign key (#{from_column}) references #{to_table}(id)}</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>Agora é possível adicionar esse método a qualquer migração acrescentando as linhas a seguir no início do arquivo de migração:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">&quot;migration_helpers&quot;</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> CreateGameTeams <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Migration</span>
&nbsp;
  extend MigrationHelpers
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">up</span>
    create_table <span style="color:#ff3333; font-weight:bold;">:game_teams</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>t<span style="color:#006600; font-weight:bold;">|</span>
      t.<span style="color:#9900CC;">references</span> <span style="color:#ff3333; font-weight:bold;">:team</span>, <span style="color:#ff3333; font-weight:bold;">:null</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">false</span>
      t.<span style="color:#9900CC;">references</span> <span style="color:#ff3333; font-weight:bold;">:game</span>, <span style="color:#ff3333; font-weight:bold;">:null</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">false</span>
      t.<span style="color:#9900CC;">timestamps</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
    foreign_key<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:game_teams</span>, <span style="color:#ff3333; font-weight:bold;">:team_id</span>, <span style="color:#ff3333; font-weight:bold;">:teams</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    foreign_key<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:game_teams</span>, <span style="color:#ff3333; font-weight:bold;">:game_id</span>, <span style="color:#ff3333; font-weight:bold;">:games</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9900CC;">down</span>
    drop_table <span style="color:#ff3333; font-weight:bold;">:game_teams</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>A linha require coloca a definição do módulo no código de migração e a linha extend adiciona os métodos do módulo MigrationHelpers à migração como métodos de classe.</p>
<p>Se você gostou desse texto e acha que ajudou você, me recomende: <a href="http://www.workingwithrails.com/recommendation/new/person/15479-patrick-espake"><img src="http://workingwithrails.com/images/tools/compact-small-button.jpg" alt="Recommend Me" /></a>.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://blog.patrickespake.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.patrickespake.com/2009/03/24/ruby-on-rails-estendendo-as-migracoes-com-helpers/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails uma forma mais inteligente de organizar controladores e helpers</title>
		<link>http://blog.patrickespake.com/2009/03/18/ruby-on-rails-uma-forma-mais-inteligente-de-organizar-controladores-e-helpers/</link>
		<comments>http://blog.patrickespake.com/2009/03/18/ruby-on-rails-uma-forma-mais-inteligente-de-organizar-controladores-e-helpers/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 20:47:38 +0000</pubDate>
		<dc:creator>patrickespake</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[ActionController::Base]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[aplicação]]></category>
		<category><![CDATA[applicationcontroller]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[backend_controller.rb]]></category>
		<category><![CDATA[conceito]]></category>
		<category><![CDATA[controlador]]></category>
		<category><![CDATA[controladores]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[frontend]]></category>
		<category><![CDATA[helper]]></category>
		<category><![CDATA[helpers]]></category>
		<category><![CDATA[herança]]></category>
		<category><![CDATA[home]]></category>
		<category><![CDATA[ideia]]></category>
		<category><![CDATA[organizar]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://patrickespake.wordpress.com/?p=488</guid>
		<description><![CDATA[Estou trabalhando numa nova aplicação em Rails, ela é dividida em área administrativa e uma área vísivel a todos os visitantes da aplicação. Inicialmente eu comecei com os controladores admin_controller.erb, home_controller.erb e o controlador padrão application_controller.erb, que é herdado pelos dois primeiros controladores. application_controller.erb 1 2 3 4 5 6 7 8 9 10 # [...]]]></description>
			<content:encoded><![CDATA[<p>Estou trabalhando numa nova aplicação em Rails, ela é dividida em área administrativa e uma área vísivel a todos os visitantes da aplicação.</p>
<p>Inicialmente eu comecei com os controladores admin_controller.erb, home_controller.erb e o controlador padrão application_controller.erb, que é herdado pelos dois primeiros controladores.</p>
<p>application_controller.erb</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># Filters added to this controller apply to all controllers in the application.</span>
<span style="color:#008000; font-style:italic;"># Likewise, all the methods added will be available for all controllers.</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> ApplicationController <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActionController::Base</span>
  helper <span style="color:#ff3333; font-weight:bold;">:all</span> <span style="color:#008000; font-style:italic;"># include all helpers, all the time</span>
  protect_from_forgery <span style="color:#008000; font-style:italic;"># See ActionController::RequestForgeryProtection for details</span>
&nbsp;
  <span style="color:#008000; font-style:italic;"># Scrub sensitive parameters from your log</span>
  <span style="color:#008000; font-style:italic;"># filter_parameter_logging :password</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>admin_controller.erb</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> AdminController <span style="color:#006600; font-weight:bold;">&lt;</span> ApplicationController
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> index
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>home_controller.erb</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> HomeController <span style="color:#006600; font-weight:bold;">&lt;</span> ApplicationController
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> index
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>Mas eu quero deixar a minha aplicação mais simples e inteligente, a minha área administrativa vai ser grande, bem como o meu frontend.</p>
<p>Vão existir uma série de filtros e helpers que vão ser usados em comum por todos os diversos controladores da área administrativa e do frontend, do jeito que está hoje eu teria que colocar muito código no application_controller.erb, bem como no helper padrão application_helper.erb.</p>
<p>Desta forma eu decidi criar dois novos controladores backend_controller.erb e frontend_controller.erb, a minha ideia é fazer todos os controladores da área administrativa herdarem o backend_controller.erb, e todos os controladores do meu frontend herdarem o controlador frontend_controller.erb. Por sua vez os controladores backend_controller.erb e frontend_controller.erb herdarão o application_controller.erb, o que garante que a minha aplicação vai continuar funcionando corretamente.</p>
<p>Fazendo isso eu ganho um grau maior de componentização dos controladores, quando eu adicionar um filtro, método ou helper no backend_controller.erb ou frontend_controller.erb todos os controladores filhos deles já terão essa funcionalidade disponível.</p>
<p>Seguindo essa ideia eu fiz algumas alterações para implementar esse recurso:</p>
<p>Criei dois novos controladores:</p>
<p>backend_controller.erb</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># Filtros adicionados nesse controlador serão aplicados em todos os controladores filhos</span>
<span style="color:#008000; font-style:italic;"># De igual modo, todos os métodos adicionados estarão disponíveis para todos os controladores filhos</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> BackendController <span style="color:#006600; font-weight:bold;">&lt;</span> ApplicationController
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>frontend_controller.erb</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># Filtros adicionados nesse controlador serão aplicados em todos os controladores filhos</span>
<span style="color:#008000; font-style:italic;"># De igual modo, todos os métodos adicionados estarão disponíveis para todos os controladores filhos</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> FrontendController <span style="color:#006600; font-weight:bold;">&lt;</span> ApplicationController
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>Alterei os controladores abaixo, para herdarem os controladores criados acimas:</p>
<p>admin_controller.erb</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> AdminController <span style="color:#006600; font-weight:bold;">&lt;</span> BackendController
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> index
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>home_controller.erb</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> HomeController <span style="color:#006600; font-weight:bold;">&lt;</span> FrontendController
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> index
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>Fazendo isso eu consigo ganhar uma componentização muito grande, se eu adicionar alguma coisa no controlador application_controller.erb, ele está disponível tanto no admin como no frontend.</p>
<p>Adicionando algo no frontend_controller.erb estará disponível em todo o frontend e adicionando algo no backend_controller.erb estará disponível em todo o admin.</p>
<p>É possível melhorar mais ainda, vamos criar dois novos helpers:</p>
<p>backend_helper.rb</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">module</span> BackendHelper
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>frontend_helper.rb</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">module</span> FrontendHelper
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>Vou colocar esses helpers para serem carregados em todos os controladores que herdam backend_controller.rb e frontend_controller.erb:</p>
<p>backend_controller.rb</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># Filtros adicionados nesse controlador serão aplicados em todos os controladores filhos</span>
<span style="color:#008000; font-style:italic;"># De igual modo, todos os métodos adicionados estarão disponíveis para todos os controladores filhos</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> BackendController <span style="color:#006600; font-weight:bold;">&lt;</span> ApplicationController
  layout <span style="color:#996600;">&quot;admin&quot;</span>
  helper <span style="color:#ff3333; font-weight:bold;">:backend</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>Acima eu aproveitei e adicionei o layout &#8220;admin.html.erb&#8221;, que será usado por todos as views da área administrativa.</p>
<p>frontend_controller.rb</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># Filtros adicionados nesse controlador serão aplicados em todos os controladores filhos</span>
<span style="color:#008000; font-style:italic;"># De igual modo, todos os métodos adicionados estarão disponíveis para todos os controladores filhos</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> FrontendController <span style="color:#006600; font-weight:bold;">&lt;</span> ApplicationController
  helper <span style="color:#ff3333; font-weight:bold;">:frontend</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>Agora no application_controller.erb, comente a linha helper :all, para não carregar todos os helpers, só os que você precisa.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># Filters added to this controller apply to all controllers in the application.</span>
<span style="color:#008000; font-style:italic;"># Likewise, all the methods added will be available for all controllers.</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> ApplicationController <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActionController::Base</span>
  <span style="color:#008000; font-style:italic;"># helper :all # include all helpers, all the time</span>
  protect_from_forgery <span style="color:#008000; font-style:italic;"># See ActionController::RequestForgeryProtection for details</span>
&nbsp;
  <span style="color:#008000; font-style:italic;"># Scrub sensitive parameters from your log</span>
  <span style="color:#008000; font-style:italic;"># filter_parameter_logging :password</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>Pronto! ;-)</p>
<p>Se você gostou desse texto e acha que ajudou você, me recomende: <a href="http://www.workingwithrails.com/recommendation/new/person/15479-patrick-espake"><img src="http://workingwithrails.com/images/tools/compact-small-button.jpg" alt="Recommend Me" /></a>.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://blog.patrickespake.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.patrickespake.com/2009/03/18/ruby-on-rails-uma-forma-mais-inteligente-de-organizar-controladores-e-helpers/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
