ydakuka
@ydakuka
Ruby developer

Как обновить значения в collection_select с помощью другого collection_select?

Есть:
d3262dfd63e245e7980575d6b9cd8069.png

quizzes.coffee
# $(document).on 'page:change', ->
$(document).on 'ready page:load', ->
  # $('#subcategories_select').hide()
  $('form').on 'change', ->

    # if $('#category_id').val()
    if true
      $.ajax
        url:      'update_subcategory'
        data:     category_id: $('#category_id').val()
        dataType: 'script'

      $('#subcategories_select').show()
    else
      $('#subcategories_select').hide()


controllers/quizzes_controller.rb
class QuizzesController < ApplicationController
  def new
    @quiz = Quiz.new
    @notcategory = Category.where "parent_id = ?", params[:category_id]
  end

  def update_subcategory
    if params[:category_id]
      # @notcategory = Category.all.collect { |c| [c.name, c.id] }
      @notcategory = Category.all.map { |c| [c.name, c.id] }
    else
      @notcategory = Category.all.map { |c| [c.name, c.id] }
    end

    render nothing: true, content_type: 'text/html', status: 200
  end

  private
    def quiz_params
      params.require(:quiz).permit(:title, :image, :description, :no_questions, :category_id)
    end
end


quizzes/_form.html.haml
= form_for @quiz, remote: true do |f|
  .field
    = f.label :title
    = f.text_field :title
  .field
    = f.label :image
    = f.text_field :image

  .field
    = f.label :category
    = f.collection_select :category_id, Category.where(parent_id: nil), :id, :name, {prompt: "Choose a Category"}, id: "category_id"
    #subcategories_select
      = f.label :subcategory
      = f.collection_select :category_id, @notcategory, :id, :name, id: "subcategory_id"

  / - if params[:category_id]
  /   = f.collection_select :category_id, Category.where(parent_id: params[:category_id]), :id, :name, { prompt: 'Choose a subcategory' }, id: "subcategory_id"

  .field
    = f.label :description
    = f.text_field :description
  .field
    = f.label :number_of_questions
    = f.number_field :no_questions
  .actions
    = f.submit 'Save'


Суть: есть два collection_select. Когда в одном выбрано одно значение, в другом отображается один список значений, а когда иное значение - другой список значений.
Вопрос: Как мне передать из контроллера из метода update_subcategory новые значения во второй collection_select? Пока что я только получаю значение params[:category_id] в методе update_subcategory из первого collection_select.

Нагуглил похожих ситуаций, но ничего не помогло.
Вот результат гугл поиска:
How to use collection_select and select helpers in...
Как передать выбранное значение из collection select?
Dynamic Dropdowns With Rails, jQuery, and AJAX
Populating collection_select field on selection of...
Генерация динамического контента через ajax в Rails
  • Вопрос задан
  • 410 просмотров
Пригласить эксперта
Ответы на вопрос 1
POS_troi
@POS_troi
СадоМазо Админ, флудер, троль.
Для начала
url:      'update_subcategory'
#replace
url:      '/url'


/controller_name/function

ну и соответсвенно это можно глянуть в роутах.
Компилятор coffee скриптов не вкурсе что у вас там с роутами, гляньте к код который он вам скомпилировал :)
Ответ написан
Ваш ответ на вопрос

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

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