Ruby on Rails Страна / Штат Выбрать Энигму

Я пытаюсь реализовать что-то очень простое, и я уже несколько дней бьюсь головой об этом.

Мой желаемый конечный результат - это раскрывающийся список Выбор страны, связанный с раскрывающимся списком Выбор штата таким образом, что при выборе данной страны ЕСЛИ известны состояния, ЕСЛИ эти состояния отображаются в раскрывающемся списке выбора, и если Для этой страны не известны состояния, вместо этого отображается текстовое поле.

Я чувствую, что я почти там. На этом этапе интерфейс фактически генерирует этот список состояний на основе страны людей, за исключением того, что он отказывается динамически обновлять раскрывающийся список.

Часть моего представления о том, где находится страна и штат, выглядит следующим образом:

# _person_setup.html.erb
         <td>
        <%= f.label :country, 'Select your country' %>*<br />
        <%= f.select :country, Carmen::country_names, {}, 
          {:style => 'width: 200px', 
          :id => 'country_select',
          :onchange => remote_function(
            :url => {:action => 'update_states'},
            :with => "'country='+value")} %>            
      </td><td>
        <p>
        <div id="states_div">
            <%= render :partial => 'states', 
                :object => Carmen::states(
                            Carmen::country_code(
                              @person.country)),
                :locals => {:form => f} %>
       </div>
        </p>            
      </td>    

Частичное упоминание в DIV выглядит следующим образом:

 # _states.html.erb
<% unless states.nil? or states.empty? %>
    <%= form.label :state, 'Select your state' %>*<br />
    <%= form.select :state, states.collect{|s| [s[0], s[0]]} %>
<% else %>
    <%= form.label :state, 'Please enter state or province' %>*<br />
    <%= form.text_field :state %>
<% end %>

Наконец, код контроллера, который предназначен для динамического обновления списка состояний:

def update_states    
puts "Attempting to update states..."    
q = params[:country]    
states = Carmen::states(Carmen::country_code(q))
puts "Country = #{q}, states = #{states.collect{|s| s[0]}.join(", ")}."
render :update do |page|
    page.replace_html "states_div", 
      :partial => 'states',
      :object => states,
      :locals => {:form => form_for(@person)}
end
puts "OK"
end

Теперь этот код вызывается в нужное время и генерирует соответствующие списки состояний. Например, когда пользователь нажимает кнопку «Австралия», в окне появляется сообщение «Попытка обновления штатов ... Страна = Австралия, штаты = Австралийская столичная территория, Новый Южный Уэльс, Северная территория, Квинсленд, Южная Австралия, Тасмания, Виктория, Западная Австралия» серверный процесс. Однако он не обновляет страницу и не выводит «OK» в конце. Короче говоря, линия, которая терпит неудачу, несомненно,

page.replace_html "states_div", 
      :partial => 'states',
      :object => states,
      :locals => {:form => form_for(@person)}

Обратите внимание, что замена этой строки

page.replace_html 'states_div', "<b>is it working</b>" 

правильно заменяет div, но, конечно, не чем-то полезным.

Может ли кто-нибудь помочь мне понять, что здесь происходит?

Ответы на вопрос(3)

Ваш ответ на вопрос