1){ $this->layout = 'ajax'; $this->set('cidades', $this->Cidade->find('list', array( 'conditions' => array( 'Cidade.estado_id' => $estado_id ), 'fields' => array( 'id', 'cidade' ), )) ); }e criar a view ...app/views/cidades/listar.ctp:<?php// Recebo $cidadesecho '<option value="">Selecione a cidade</option>\n'; foreach($cidades as $id => $cidade) echo "<option value='$id'>$cidade</option>\n"; ?> Veja que essa view ira gerar as opcoes de cidades do nosso select Cidades. 5o) No ...app/controllers/users_controllers.php vamos: definir a var $helpers, criar a action "listar_cidades" e modificar a action add:class UsersController extends AppController { var $name = 'Users'; var $helpers = array('Ajax', 'Javascript'); function add() { if (!empty($this->data)) { $this->User->create(); if ($this->User->save($this->data)) { $this->Session->setFlash(__('The user has been saved', true)); $this->redirect(array('action' => 'index')); } else { $this->Session->setFlash(__('The user could not be saved. Please, try again.', true)); // Se o usuario selecionou algum estado, carregamos a lista de cidades para a view if(!empty($this->data['User']['estado'])){ $this->loadModel('Cidade'); $cidades = $this->Cidade->find('list', array( 'conditions' => array( 'Cidade.estado_id' => $this->data['User']['estado'] ), 'fields' => array('id', 'cidade')) ); $cidades = array('' => 'Selecione a cidade', $cidades); // Adiciono o "Selecione a cidade" na lista de cidades $this->set('cidades', $cidades); } } } $this->loadModel('Estado'); $estados = $this->Estado->find('list', array('fields' => array('id', 'estado'))); $this->set('estados', $estados); } function listar_cidades(){ // Se foi informado o Estado via POST if(!empty($this->data['User']['estado'])){ $this->redirect(array('controller' => 'cidades', 'action' => 'listar', $this->data['User']['estado'])); } }... Veja o codigo do formulario criado no view add, em ...app/views/users/add.ctp:<?php // Carrego o Prototype e o Scriptaculos $javascript->link('https://ajax.googleapis.com/ajax/libs/prototype/1.7.0.0/prototype.js', false); $javascript->link('https://ajax.googleapis.com/ajax/libs/scriptaculous/1.8.3/scriptaculous.js', false); ?><div class="users form"><?php echo $this->Form->create('User');?> <fieldset> <legend><?php __('Add User'); ?></legend> <?php echo $this->Form->input('estado', array( 'options' => $estados, 'empty' => 'Selecione o estado' ) ); // Crio um Loading... para que o usuario saiba o que esta ocorrendo echo '<div id="loading" style="display: none"><b>' . $html->image('carregando.gif') . ' Aguarde, carregando cidades...</b></div>'; echo $this->Form->input('cidade', array( 'type' => 'select', ) ); echo $this->Form->input('username'); echo $this->Form->input('password'); ?> </fieldset><?php echo $this->Form->end(__('Submit', true));?></div><div class="actions"> <h3><?php __('Actions'); ?></h3> <ul> <li><?php echo $this->Html->link(__('List Users', true), array('action' => 'index'));?></li> </ul></div><?php echo $ajax->observeField('UserEstado', array( 'url' => array( 'action' => 'listar_cidades' ), 'frequency' => 0.2, 'update' => 'UserCidade', 'indicator' => 'loading', ) ); ?>Bom. o resultado final e este!Imagem 1 - O Form com o select Estado com os valores do banco e o select Cidade vazio, aguardando a selecao do estado.:Imagem 2 - O usuario seleciona um estado:Imagem 3 - Selecionado o estado a mensagem de carregando (atributo "indicator" do observeField()) aparece:Imagem 4 - E carregada a lista de cidades!Espero que o artigo seja util! Caso fique com alguma duvida ou tenha uma sugestao/critica, fique a vontade para comentar! =]