Вы должны использовать хотя бы немного JavaScript. В jQuery вы можете сделать это:
$(document).ready(function(){
$('#first-select').change(function(){
$('#second-select').load('/categories/2');
});
});
В вашем CategoriesController ваше действие показа должно отвечать на format.js, который должен сделать подкатегории частичными:
class CategoriesController
...
def show
@subcats = SubCategory.find_all_by_parent_category(params[:id])
...
respond_to |format|
...
format.js { render :partial => "subcategories", :locals => { :subcats => @subcats } }
end
end
и ваши частичные подкатегории:
<% subcats.each do |subcat| %>
<option value="<%= subcat.value %>"><%= subcat.text %></option>
<% end %>