Carlos Brando

Nome do Jogo

Simple on Rails - Carregando dropdowns dinamicamente

Recentemente tive de encontrar uma solução para um problema simples: eu tinha uma lista de estados e cidades em dropdowns. A intenção é que a lista de cidades fosse carregada de acordo com o estado selecionado. Simples.

Como estou começando com o Rails, procurei na internet por alguma dica para fazer isto. Encontrei diversos sites descrevendo o passo-a-passo para a solução. Entre alguns deles os blogs do Eustáquio e do André Ribeiro.

Achei a solução apresentada por eles muito confusa e com muito código.

Mas uma coisa que me chamou atenção foi o seguinte comentário:

Vamos utilizar alguma técnica mais atual, que tal um pouco de AJAX… é relativamente fácil implementar isso com Rails, normalmente carregaríamos um fragmento de HTML que implementa o campo através de uma requisição AJAX enganchada no método onchange do drop-down. Mas esta técnica é tão… antiga.

Antiga? Não entendi. Para mim antiga é a roda, e eu não pretendo inventá-la de novo.

Sempre existe mais de uma solução para o mesmo problema, e a melhor é sempre a mais simples.

Depois de ler isto, resolvi tentar fazer do meu jeito:

Inclui um observe_field na minha view: [source:ruby]<span id=”select_cidades”></span> <%= observe_field :job_state,

:url =&gt; { :action =&gt; 'carrega_cidades' },
:update =&gt; 'form_cidade',
:with =&gt; 'form_estado',
:complete =&gt; "visual_effect(:highlight, 'td_cidades')" %&gt;[/source]

E no meu controller: [source:ruby]def carrega_cidades @cities = City.find(:all,

    :conditions =&gt; "state_id = #{params[:job_state]}",
    :order =&gt; 'nome')

render :inline =>

"&lt;%= collection_select('job', 'city_id' , @cities, 'id', 'nome') %&gt;"

end[/source] Funciona!

Não se esqueça porque você decidiu aprender rails.

Comments