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 => { :action => 'carrega_cidades' },
:update => 'form_cidade',
:with => 'form_estado',
:complete => "visual_effect(:highlight, 'td_cidades')" %>[/source]
E no meu controller: [source:ruby]def carrega_cidades @cities = City.find(:all,
:conditions => "state_id = #{params[:job_state]}",
:order => 'nome')
render :inline =>
"<%= collection_select('job', 'city_id' , @cities, 'id', 'nome') %>"
end[/source] Funciona!
Não se esqueça porque você decidiu aprender rails.