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.
Maravilhoso Carlos, vc falou tudo aqui:
“Não se esqueça porque você decidiu aprender rails.”
Um abraço.
Dá para você postar a sua view aí para a gente dar uma olhada? :-)
Às vezes a gente esquece um post antigo e acha ele de novo …
Só lembrando que se você remover e inserir novamente um elemento que tenha algum “trigger”, não vai funcionar. Se você preencher o estado através da seleção do país removendo e inserindo o elemento do estado, que sendo alterado carregaria as cidades, vai dar problema a não ser que no momento de inserção do elemento novo você restaure os “triggers”. E aí vai ter que escrever mais um pouquinho de código. ;-)
É… você tem razão.
opa desculpa encomodar mas estou com um probleminha aqui no meus projetos tenho duas tabelas clientes pedidos dentro da tabela pedido tem um cliente eu preciso buscar o cliente pelo codigo por exemplo ele digita o codigo da um tab e ele me traz o cliente pertecente ao codigo digitado, sem ter um select porque se nao ficaria muito grande o select nao sei se seria pedir de mais pedir um exemplo uma luz algo
muito obrigado pela atencao