dynamic selects using rjs, page.replace_html and on_change

Hello everybody, I’m having a “simple” problem but is taking me a long time to understand and i’ll try to do a short and a full explanation about the problem… I’m quite beginner at rails and i’m facing a weird problem to make a two select boxes working dynamic. I have a table called conditions and this table has condition_type and condition_value. I want to put in the first select all the condition types and as an user select a type the condition values for that type (this means all the rows that have condition_type=selected) will be show in a second select. So far i’m trying different approachs like railcast #88 or http://pullmonkey.com/2008/3/30/dynamic-select-boxes-ruby-on-rails/ but i dont know what is happening. When i select the condition_type the on_change method is called and then the controller is called and make the correct search on the database and i can get the correct response at firebug but the second select is not rendered with the new data. </short explanation> So far, my code is: rules_controller.rb def new @rule = Rule.new @condition_type = Condition.find(:all, :select => ‘DISTINCT condition_type’) @condition_value = Condition.find(:all, :select => ‘DISTINCT condition_value’) end def update_condition_value @condition_value = Condition.find(:all, :conditions => { :condition_type => params[:condition_type]}) render :action => “update_condition_value.js.rjs” end _form_new.html.erb <% form_for @rule do |rule_form| %> Name: <%= rule_form.text_field :rule_name %> Condition type: <%= select_tag ‘condition_type[]’, options_from_collection_for_select(@condition_type, ‘condition_type’, ‘condition_type’), {:onchange => remote_function(:url => {:action => “update_condition_value”}, :with => “‘condition_type=’+value”)} %>

Condition value: <%= render :partial => ‘condition_value’%>
<%= rule_form.submit “Submit” %> <%end%> _condition_value.html.erb <%= select_tag ‘condition_value’, options_from_collection_for_select(@condition_value, ‘condition_value’, ‘condition_value’)%> update_condition_value.js.rjs page.replace_html ‘condition_value_div’, :partial => ‘condition_value’e’)

The problem that i’m facing is that when i select some condition_type the on_change is activated and then they call the update_condition_value.js.rjs and i can see from the firebug that i receive an response like:

try {
Element.update("condition_value_div", "<select id=\"condition_value\" name=\"condition_value\"><option value=\"private\">private</option>\n<option value=\"public\">public</option></select>\n\n");

} catch (e) { alert('RJS error:\n\n' + e.toString()); alert('Element.update(\"condition_value_div\", \"<select id=\\\"condition_value\\\" name=\\\"condition_value\\\"><option value=\\\"private\\\">private</option>\\n<option value=\\\"public\\\">public</option></select>\\n\\n\");'); throw e }

as it should be… This means that they went to the controller and make the correct call from the database as i can see at the log at netbeans. But the problem is that the page is not rendered or any changes occoru with the second select. So, i can say that every step is working until the call from the controller at update_condition_value but looks like i have an mismatch or error at render :action => “update_condition_value.js.rjs” call. I think maybe could be a problem with my routes cause when i see the log after i select something at the first select i get this: _Processing RulesController#update_condition_value to json (for 127.0.0.1 at 2009-09-08 14:43:18) [POST] Parameters: {“format”=>“json”, “condition_type”=>“group”, “action”=>“update_condition_value”, “controller”=>“rules”} [4;36;1mCondition Load (0.0ms)[0m [0;1mSELECT * FROM conditions WHERE (conditions.condition_type = ‘group’) Rendering rules/update_condition_value [4;35;1mCondition Columns (0.4ms)[0m [0mSHOW FIELDS FROM conditions[0m Rendered rules/condition_value (1.8ms) Completed in 89ms (View: 2, DB: 5) | 200 OK [http://localhost/rules/update_condition_value] and i understand that they are trying to render the content at http://localhost/rules/update_condition_value but the address that i’m using is http://localhost:3000/coreui/privacy/1/rules/new as u can see at the routes file:

  • map.resources :rules, :path_prefix => '/coreui/privacy/:user_id'*
    

I dont know what else i should do to make this work and any help or tips will be welcome!

Thanks in advance…

</complete explanation>

Hello, Did this email ge tto the mailing list?? Thanks