Это обычно обрабатывается в Javascript. Мне не особенно нравится кодировать Javascript, поэтому для этого я использую form_observer (помощник Rails, который использует библиотеку Prototype Javascript для просмотра вашей формы на предмет изменений ввода) и обновляет DIV в HTML, содержащем второе поле выбора, основанное на результатах вызова AJAX. Поскольку AJAX общается с моим сервером, я могу написать произвольно сложную логику в Ruby для рендеринга нового HTML.
Пример кода:
#goes in view
<%= Code to render the first list box. %>
<%= render :partial => 'second_list_box_partial', :locals => {:selected = insert_magic_here } %>
<%= observe_field(:first_list_box,
:url => { :action => :second_box_ajax }),
:frequency => 0.5,
:update => :second_list_box_div,
:with => %Q| 'value=' + $('first_list_box').value; |
%>
#goes in controller
def second_box_ajax
first_box_value = params[:value]
#magic goes here
@selected = #more magic
render :partial => 'second_list_box_partial', :locals => {:selected => @selected}, :layout => false
end
#goes in partial
<div id="second_list_box_div">
Actual code to render list box goes here.
</div>