Activeadmin formtastic动态选择
我想通过Activeadmin的formtastic做一个动态选择选项,如下所示:
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
我的业余代码显然不能像我预期的那样工作。 我应该做些什么改变?
我有4个型号如下:
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
这是我如何在activeadmin中实现多个动态选择菜单:
配置/初始化/ active_admin.rb
config.register_javascript 'exam_registrations.js.coffee'
应用程序/管理/ 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
应用程序/资产/ JavaScript的/ 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()
重启服务器,菜单工作!
- 是否有更简单的方法使用ActiveAdmin创建/选择相关数据?
- Rails3 Active Admin:如何在首次点击Shipments标签时仅显示打开状态记录?
- ActiveAdmin自动加载完整关联表
- activeadmin:为嵌套资源添加删除
- 如何使用belongs_to / has_many关系在Active Admin索引中显示关联模型的属性(Rails 3.2 / Active Admin)
- Active Admin Gem – Rails 3.2.3,Heroku错误日志
- ActiveAdmin:编辑模型实例时下拉太大
- 使用ActiveAdmin的DSL与共享模块包括
- 如何使用多个Active Admin实例来完成单独的模型