在 rails 中使多选与简单形式一起使用
Making multiselect work with simpleform, in rails
我的目标是让老师能够 select 教授他们能够教授的多种课程,我使用的是简单形式。它可以是复选框或标签
以下是我的设置。
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
我可能遗漏了什么?
在模型中您应该验证 curriculums
,而不是 curriculum_ids
。
建立一个具有多对多关系的连接 table。这将问题分开,允许添加额外的字段而无需太多工作。
创建迁移 table/model X,并引用所需的字段,在本例中使用 subjects
、curriculum
、grades
和 teacher_profiles
。
在此table中创建多对多关系,然后使新模型嵌套在teacher_profiles
下。
我的目标是让老师能够 select 教授他们能够教授的多种课程,我使用的是简单形式。它可以是复选框或标签
以下是我的设置。
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
我可能遗漏了什么?
在模型中您应该验证 curriculums
,而不是 curriculum_ids
。
建立一个具有多对多关系的连接 table。这将问题分开,允许添加额外的字段而无需太多工作。
创建迁移 table/model X,并引用所需的字段,在本例中使用 subjects
、curriculum
、grades
和 teacher_profiles
。
在此table中创建多对多关系,然后使新模型嵌套在teacher_profiles
下。