Как вывести все подкатегории при выборе категории?

Есть три модели - bookings, categories, subcategories.
Связи между моделями:
Booking
belongs_to :category
belongs_to :subcategory
belongs_to :user

Category
has_many :subcategories
has_many :bookings

Subcategory
belongs_to :category

При создании заказа выбирается коллекция category_id и коллекция subcategory_id.
Но выбирается все и категории и подкатегории.
Как осуществить следующие - выбираем категорию и во втором collection_select выводить только подкатегории выбранной категории?

<%= f.collection_select :category_id, Category.all, :id, :title, {prompt: 'Выберите категория'} %>
<%= f.collection_select :subcategory_id, Subcategory.all, :id, :title, {prompt: 'Выберите подкатегорию'} %>
  • Вопрос задан
  • 677 просмотров
Решения вопроса 1
monaxide
@monaxide Автор вопроса
DevOps
Если кому-то понадобится:
view:
<%= f.collection_select :category_id, Category.all, :id, :title, {prompt: 'Выберите категория'} %>
<%= f.collection_select :subcategory_id, Subcategory.all, :id, :title, {prompt: 'Выберите подкатегорию'} %>

update_sub_categories.js (в одной папке со вьюхой):
$("#booking_subcategory_id").empty().append("<%= escape_javascript(render(:partial => 'subcategory', :collection => @cats, :as => :cat)) %>");

routes.rb:
get 'update_sub_categories' => 'bookings#update_sub_categories'
get 'bookings/update_sub_categories' => 'bookings#update_sub_categories'

контроллер:
def update_sub_categories
@cats = Subcategory.where(category_id: params[:category_id]).all
respond_with(@cats)
end

_subcategory.html.erb:
<%= cat.title %>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Sworg
Как вариант, при выборе первого collection_select отправлять ajax запрос на сервер с параметром category_id, который вернет, например, json всех подкатегорий. А уже потом их вставлять с помощью JS в форму.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы