Activeadmin formtastic dynamic select

前端 未结 1 829
死守一世寂寞
死守一世寂寞 2020-12-16 02:55

I would like to make a dynamic select option via Activeadmin\'s formtastic like so:

  form do |f|
    f.inputs \"Exam Registration Details\" do
             


        
相关标签:
1条回答
  • 2020-12-16 03:18

    SOLVED

    For anyone else wrestling with the same problem, look at this railscast

    here's how I implemented multiple dynamic select menus in activeadmin:

    config/initializers/active_admin.rb

      config.register_javascript 'exam_registrations.js.coffee'
    

    app/admin/exam_registrations.rb

      form do |f|
        f.inputs "Exam Registration Details" do
          f.input :user_id, :label => 'Teacher', :as => :select, :collection => User.where(:admin => 'false', :active => true).order(:name), :include_blank => true
          f.input :student_id, :hint => 'Students grouped by teacher names', :as => :select, :collection => option_groups_from_collection_for_select(User.where(:admin => false, :active => true).order(:name), :students, :name, :id, :name)
          f.input :lesson_id, :hint => 'Lessons grouped by student names', :as => :select, :collection => option_groups_from_collection_for_select(Student.where(:active => true).order(:name), :lessons, :name, :id, :name)
        end
        f.buttons
      end
    

    app/assets/javascripts/exam_registrations.js.coffee

    #first menu    
    jQuery ->
          $('#exam_registration_student_id').parent().hide()
          students = $('#exam_registration_student_id').html()
          $('#exam_registration_user_id').change ->
            user = $('#exam_registration_user_id :selected').text()
            escaped_user = user.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1')
            options = $(students).filter("optgroup[label='#{escaped_user}']").html()
            if options
              $('#exam_registration_student_id').html(options)
              $('#exam_registration_student_id').parent().show()
            else
              $('#exam_registration_student_id').empty()
              $('#exam_registration_lesson_id').empty()
    
    # second menu
      $('#exam_registration_lesson_id').parent().hide()
      lessons = $('#exam_registration_lesson_id').html()
      $('#exam_registration_student_id').click ->
        student = $('#exam_registration_student_id :selected').text()
        escaped_student = student.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1')
        options = $(lessons).filter("optgroup[label='#{escaped_student}']").html()
        if options
          $('#exam_registration_lesson_id').html(options)
          $('#exam_registration_lesson_id').parent().show()
        else
          $('#exam_registration_lesson_id').empty()
    

    restart the server and the menus work!

    0 讨论(0)
提交回复
热议问题