Ruby on Rails и ActiveAdmin: добавьте все объекты одновременно, добавьте один за другим - PullRequest
0 голосов
/ 20 февраля 2019

Я использую приложение Ruby on Rails 5 API с Active Admin.У меня есть модель с названием «Подписка с курсами has_many» («Курс также является моделью»).

Когда я добавляю курсы в подписку, мне нужно сделать это один за другим, как показано на рисунке: enter image description here

Я хочу иметь возможность добавлять все курсы в подписку одновременно, а не по одному.Я попытался использовать флажок для множественного выбора, но это не сработало.Это код:

ActiveAdmin.register Subscription do
  # require 'lib/app_languages.rb'
  permit_params :name, :seat_limit, :domain, :language, :organization, course_ids: [], user_ids: [], subscription_courses_attributes: [:id, :course_id, :_destroy, :_create, :_update]

  config.sort_order = 'id_asc'

  # Index
  index do
    id_column
    column :name
    column :seat_limit
    column :domain
    column :organization
    column :language do |subscription|
       AppLanguages.languages[subscription.language]
    end
    column "Unlocked courses", :courses
    column :created_at
    actions
  end

  # Show
  show do
    attributes_table do
     row  :name
     row  :language do |subscription|
        AppLanguages.languages[subscription.language]
     end
     row  :seat_limit
     row  :domain
     row  :organization
     row  :created_at
    end

    panel 'Unlocked Courses' do
      table_for subscription.courses do
        column :id
        column "Title" do |course|
          link_to course.title, admin_course_path(course)
        end
        column "language" do |course|
          AppLanguages.languages[course.language]
        end
        column :author
      end
    end

    panel 'Subscribed users' do
      table_for subscription.users do
        column :id
        column "name" do |user|
          link_to user.name, admin_user_path(user)
        end
        column :email
        column "language preference" do |user|
          AppLanguages.languages[user.language]
        end
      end
    end
  end

  # Edit
  form do |f|
    f.semantic_errors *f.object.errors.keys

    f.inputs 'Details' do
     f.input :name
     f.input :language, :as => :select, :collection => AppLanguages.languages_array
     f.input :seat_limit
     f.input :domain
     f.input :organization
    end


    f.has_many :subscription_courses do |sub_c|
      sub_c.inputs "Unlocked Courses" do
        if !sub_c.object.nil?
          sub_c.input :_destroy, as: :boolean, label: "Destroy?"
        end
        sub_c.input :course ### should add here option for add all
      end
    end

    f.inputs 'Subscribed users:' do
      f.input :users
    end

    f.actions
  end
end

1 Ответ

0 голосов
/ 14 марта 2019

Использование для массива должно помочь ввода формы as: :select с множественным выбором.Как то так:

sub_c.input :items, as: :select, 
                    collection: courses_collection, 
                    multiple: true 
...