Заставить мультиселект работать с простой формой в рельсах - PullRequest
1 голос
/ 01 мая 2020

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

Ниже приведены мои настройки.

Модель TeacherProfile

class TeacherProfile < ApplicationRecord
  belongs_to :subject 
  belongs_to :grade
  # belongs_to :curriculum
  has_many :curriculums
  belongs_to :user

  validates :national_identity, :curriculum_ids, :grade_id, :subject_id,
    :employer, :years_teaching, 
    :about_me, presence: true

  def self.teachers_classes(user_id)
    ClassRoom.where(user_id: user_id)
  end
end

Модель учебного плана

class Curriculum < ApplicationRecord
  has_many :student_profiles
  has_many :teacher_profiles
end

Форма

.py-5.bg-light-v2
  .container
    .row.align-items-center
        .col-md-6
            %h2 Teacher Profile

%section.padding-y-50.border-bottom.border-light
  .container
    .row
      .col.col-md-8.mb-5
        = simple_form_for(@teacher_profile) do |f|
          = f.error_notification
          = f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present?

          .border-bottom.mb-4.pb-4
            %h5.mb-4 
              Personal Details
              %br
              %small.text-muted select what applies to you, tick if it applies to you.

            = f.input :national_identity, label: "Enter your National ID or Passort", placeholder:"216331771"
            = f.input :special_education, label: "I have Special education skills"
            = f.input :has_hardware, label: "I have a computer & Internet"
            = f.input :is_available, label: "I am available to tutor"
            = f.input :has_tsc_certificate, label: "I have a TSC certificate"
            = f.input :has_good_conduct, label: "I have  good conduct certificate"

          .border-bottom.mb-4.pb-4
            %h5.mb-4 Professional Details
            = f.input :years_teaching, label: "I have been teaching since"
            .row
              -# .col= f.association :curriculum, prompt: "Select the curriculum you use"
              .col= f.association :curriculums, input_html: {:multiple => true} 
              .col= f.association :grade, prompt: "Select the grades you teach"
            = f.association :subject, prompt: "Select the subjects you teach"
            = f.input :employer, label: "I currently work at", placeholder:"Enter name of employer if applicable or leave blank"

          .border-bottom.mb-4.pb-4
            %h5.mb-4 About your passion
            = f.input :about_me, as: :text, label: "Tell us why you love teaching", placeholder:"I am passionate about teaching..."

          .form-actions
            = f.button :submit, class: "btn btn-primary btn-lg mt-2"

Я получаю сообщение об ошибке:

Curriculum ids can't be blank

Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Создайте соединительный стол с отношением «многие ко многим». Это разделяет проблему, позволяет добавлять дополнительные поля без особых усилий.

Создать таблицу миграции / модель X и ссылаться на нужные поля, в этом случае используйте subjects, curriculum, grades и teacher_profiles.

Создайте отношение «многие ко многим» в этой таблице, а затем создайте новую модель, вложенную в teacher_profiles.

Видео " Rails - Вложенные формы в Rails | [Учебник]"полезно.

0 голосов
/ 02 мая 2020

В модели вы должны подтвердить curriculums, а не curriculum_ids.

...