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
-~----------~----~----~----~------~----~------~--~---