Menus de seleção dinâmica no Rails 3

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.