Aqui estou filtrando os distritos que dependem dos estados.
Eu fiz isso usando jQuery.
você tem que incluir o arquivo jquery.js e remover o arquivo prototype.js na seção head, ou seja, em seu aplicativo Rails para executar isso perfeitamente.
para fazer isso siga este link
http://blog.sandeep.me/2011/09/how-to-use-jquery-instead-of-prototype.html
Em um formulário de registro, estou recebendo distritos, dependendo do estado selecionado.
siga meu link do hub git acima para entender claramente.
No arquivo do controlador do formulário de registro, ou seja, regforms_controller.rb. eu escrevi este método
aqui “state_id” é a chave estrangeira do id do estado na tabela de distritos.
def dynamic_districts
@districts = District.find_all_by_state_id(params[:id])
respond_to do |format|
format.js
end
end
Aqui estou obtendo todos os distritos de um determinado estado com state_id.
Observação: aqui, o modelo regform.rb pertence a ambos os modelos, ou seja, estado e distrito.
No modelo regform.rb, você fez uma associação com o estado e distrito
belongs_to :state
belongs_to :district
Em seguida, no arquivo application.js que está na pasta public / javascripts
quando você altera o menu suspenso de estados, esta função ajax será acionada …..
jQuery(document).ready(function() {
jQuery('#regform_state_id').change(function() {
var data=$('#regform_state_id').val();
$.ajax({
type: "POST",
url: "http://"+location.host+"dynamic_districts/"+data,
data: data,
});
});
});
os valores resultantes serão postados no arquivo dynamic_districts.js.erb que está localizado na pasta views
dos formulários de registro, ou seja, “app / views / regforms”.
Nota: – este arquivo deve ser criado por nós mesmos.
No arquivo dynamic_districts.js.erb
no arquivo new.html..erb de regforms, adicione este código jQuery para prompt.
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery('#regform_district_id').html("<option value=''>Select District</option>");
});
</script>
no arquivo routes.rb que está na pasta de configuração. adicione esta rota. de modo que onde quer que você use o menu suspenso, você será redirecionado apenas para aquele controlador. essa é a razão de eu ter guardado
“http: // location.host ….” no método ajax acima no arquivo application.js.
postar ” distritos dinâmicos /: id” => “regforms # distritos dinâmicos “
$('#regform_district_id').empty();
<% for district in @districts %>
$('#regform_district_id').append($("<option></option>").attr("value",<%= district.id %>).text('<%= district.name %>'));
<% end %>
jquery irá anexar os valores resultantes ao menu suspenso do distrito.
é isso aí.
por favor poste comentários e deixe-me saber algum feedback.