Вы можете создать свой раскрывающийся список с помощью помощника collection_select, а при выборе значения в одном раскрывающемся списке вы можете отправить запрос ajax обратно в действие вашего контроллера, чтобы обновить другой элемент страницы с помощью нового раскрывающегося списка и продуктов, например, так
<%= collection_select(:category, :some_category_method_name,
Category.all, :id, :category_name,
{:prompt => 'Select'},
{ :onchange => remote_function(:url => {:action => 'get_products'},
:with => "'id=' + this.value")})
%>
<div id='product_dropdown'></div>
Таким образом, в основном то, что делает приведенный выше код, генерируя раскрывающийся список для категории и изменяя выбранное значение из этого раскрывающегося списка, отправляет запрос к действию 'get_products' с идентификатором выбранной категории. Затем в этом методе вы можете получить все товары этой категории и обновить элемент product_dropdown новым партиалом, в котором есть выпадающий список товаров.
def get_products
@category = Category.find(params[:id)
render :update do |page|
page.replace_html 'product_dropdown',
:partial => 'partial_name_in_which_you_have_product_drop_down',
:locals => {:products => @category.products}
end
end
Надеюсь, это поможет вам начать.
Если вы не уверены, как работает collection_select, тогда вот документы