Rails 3.1 — Active_admin и флажки

#javascript #ruby-on-rails-3.1 #checkbox #formtastic #activeadmin

#javascript #ruby-on-rails-3.1 #флажок #formtastic #activeadmin

Вопрос:

Этот вопрос на самом деле состоит из двух вопросов.

  1. Кнопка выбрать все Active_admin использует formtastic для отображения форм, поэтому я собираюсь спросить в контексте formtastic. Как бы я создал кнопку, которая устанавливает все флажки на странице? Я мог бы сделать это с помощью JavaScript, но я не уверен, как это сделать в formtastic.
  2. Установите коллекцию на основе выбранного значения. У меня есть выпадающее меню, которое позволяет пользователям выбирать из списка «Курсов». Студенты зачислены на курсы, поэтому я хочу иметь возможность отображать список студентов, зачисленных на курс, с флажками. Ie: Список студентов изменится, если пользователь выберет другой курс.

    course.rb

    has_and_belongs_to_many :студенты

    student.rb

    has_and_belongs_to_many:курсы

Ответ №1:

В Formtastic нет простого решения для флажка «выбрать все», если вы используете JQUERY, вы можете это сделать

В вашей модели student.rb добавьте

 attr_accessor :select_all_courses

f.inputs "Courses" do
  f.input :select_all_courses, :as => :boolean, :label => 'SELECT ALL', :input_html => {:onclick => "jQuery.each( $('.student_courses_checkboxes'), function() { this.checked = $('.all_selector')[0].checked });", :class => "all_selector"}  
  f.input :courses, :as => :check_boxes, :collection => @courses, :input_html => {:class => 'student_courses_checkboxes'}      
end
  

Лучшее, что вы можете сделать в active admin с formtastic, это:

В форме вашего курса

 f.input :students, :as => :check_boxes, :collection => @students   
  

Ответ №2:

Поскольку мне нужно автоматически добавлять кнопки Выбора всех / Выбора нет для ввода ВСЕХ групп флажков, я добавляю немного javascript для active_admin.js (переименован из active_admin.js.coffee, поскольку он не использует CoffeeScript).

 //= require active_admin/base

$( document ).ready(function() {
    var $select_btns = $('<li class="choice"><div class="select-btn-container"><button class="select_all">Select all</button><button class="select_none">Deselect all</button></div></li>');
    $('.inputs .check_boxes').each(function (i, el) {
        $(el).find('.choices-group').prepend($select_btns.clone());
    });

    $('.inputs')
        .on('click', '.select_all', function () {
            var $check_boxes = $(this).parents('.choices-group').find('input');
            $check_boxes.each(function () {
                this.checked = true;
            });
            return false;
        })
        .on('click', '.select_none', function () {
            var $check_boxes = $(this).parents('.choices-group').find('input');
            $check_boxes.each(function () {
                this.checked = false;
            });
            return false;
        });
});
  

Работа над ActiveAdmin 1.0.0 на Rails 4.0.4.
Надеюсь, это поможет.