Activeadmin形式动态选择 [英] Activeadmin formtastic dynamic select

查看:110
本文介绍了Activeadmin形式动态选择的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想通过 Activeadmin 的格式进行动态选择,如下所示:

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

  form do |f|
    f.inputs "Exam Registration Details" do
      f.input :user_id, :as => :select, :collection => User.where(:admin => 'false')
      #selects user from list. WORKING

      f.input :student_id, :as => :select, :collection => Student.joins(lessons: :user)
      #collection of students will change to students who have lessons with chosen user. NOT WORKING, returns all students who have lessons. 

      f.input :lesson_id, :as => :select, :collection => Lesson.joins(:student, :user)
      #collection of lessons will change to reflect lessons connected by chosen user and student. NOT WORKING, returns all lessons.
    end
    f.buttons
  end

我的业余代码是显然没有按我的预期工作。我应该进行哪些更改?

My amateurish code is obviously not working as I intended it to. What changes should I make?

我有4种型号,如下所示:

I have 4 models as below:

class Student < ActiveRecord::Base
  has_many :lessons
  has_many :users, through: :lessons
  has_many :exam_registrations, through: :lessons

class Lesson < ActiveRecord::Base
  belongs_to :user
  belongs_to :student
  belongs_to :exam_registration

class User < ActiveRecord::Base
  has_many :lessons
  has_many :students, through: :lessons
  has_many :exam_registrations, through: :lessons

class ExamRegistration < ActiveRecord::Base
  has_many :lessons
  has_many :users, through: :lessons
  has_many :students, through: :lessons


推荐答案

已解决

对于其他遇到相同问题的人,请看一下在此 railscast

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

这是我在activeadmin中实现了多个动态选择菜单:

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!

这篇关于Activeadmin形式动态选择的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆