2013-07-03 12 views
8

Ich möchte eine dynamische wählen Sie die Option über Activeadmin ‚s formtastic wie so machen:Activeadmin formtastic dynamische wählen

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 

Mein dilettantisch Code ist offensichtlich nicht funktioniert, wie ich es gedacht. Welche Änderungen sollte ich vornehmen?

Ich habe 4 Modelle wie folgt:

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 

Antwort

5

GELÖST

Für jemand anderes mit dem gleichen Problem ringen, schauen Sie sich diese railscast

hier ist, wie ich mehrere dynamische Auswahlmenüs in activeadmin implementiert :

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() 

Neustart der Server und die Menüs Arbeit !

+1

danke für die Info, das hat nach dieser kleinen Änderung für mich funktioniert. 'config.register_javascript 'exam_registrations'' – blotto

+0

Ich bin froh, dass ich helfen konnte! –

+0

@ Ryan.lay: können Sie bitte einen Blick auf http://stackoverflow.com/questions/28187354/active-admin-populate-one-of-the-secre-drop-down-after-first – inquisitive

Verwandte Themen