hey people i am trying to create dynamic drowns with three select boxes and using one model ...if i change first drop down then the second gets updated but the third one doesnt get updated...could u please tell me wat is the problem here is the controller code class AdminController < ApplicationController def state_update return unless request.xhr? cities = State.find_by_sql("select distinct city_name from states where state_id=#{params[:state_id]}") render :update do |page| page << update_select_box( "city_id", cities, {:text => :city_name, :clear => [''area_id'']}) end end def city_update return unless request.xhr? areas = State.find( :all, :conditions => ["city_id=?", params[:ecosite_index]]) flash[:notice]="#{params[:ecosite_index]}" render :update do |page| page << update_select_box( "area_id", areas, {:text => :area_name} ) end end def index @states=State.find_by_sql("select distinct name,state_id from states") end end here is the view <script language="javascript"> function update_select_options( target, opts_array, clear_select_list ) { if( $(target).type.match("select" ) ){ // Confirm the target is a select box // Remove existing options from the target and the clear_select_list clear_select_list[clear_select_list.length] = target // Include the target in the clear list for( k=0;k < clear_select_list.length;k++){ obj = $(clear_select_list[k]); if( obj.type.match("select") ){ len = obj.childNodes.length; for( var i=0;i < len;i++) {obj.removeChild(obj.firstChild);} } } // Populate the new options for(i=0;i < opts_array.length;i++){ o = document.createElement( "option" ); o.appendChild( document.createTextNode( opts_array[i] [0] ) ); o.setAttribute( "value", opts_array[i][1] ); obj.appendChild(o); } } } </script> <%= javascript_include_tag :defaults %> <%= start_form_tag %> <% options = [["Select State", " "]] + @states.collect { |c| [c.name,c.state_id] } %> <%= select("state", "id", options) %> <%= select( "city", "id", [] ) %> <%= select( "area", "id", [] ) %> <%= submit_tag %> <%= end_form_tag %> <%= observe_field "state_id", {:url => {:action => ''state_update''}, :with => "state_id"} %> <%= observe_field "city_id", {:url => {:action => ''city_update''}, :with => "ecosite_index"} %> this is the helper code def update_select_box( target_dom_id, collection, options={} ) # Set the default options options[:text] ||= ''name'' options[:value] ||= ''id'' options[:include_blank] ||= true options[:clear] ||= [] pre = options[:include_blank] ? [[''select '',''select '']] : [] out = "update_select_options( $(''" << target_dom_id.to_s << "'')," out << "#{(pre + collection.collect{ |c| [c.send(options[:text]), c.send(options[:value])]}).to_json}" << "," out << "#{options[:clear].to_json} )" end --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---