2017-01-27 5 views
1

Хорошо, ребята, это может быть немного запутанным, поэтому придерживайтесь меня. Позвольте мне начать с представления моих таблиц. В основном я создал четыре таблицы при миграции.Active Record DB Modeling - Ruby on Rails

  • Студенты
  • Учителя
  • Субъекты
  • Пользователь Admin

Вот мои файлы миграции:

Студенты:

def up 
    create_table :students, :id => false do |t| 
     t.integer "student_id",:primary_key => true 
     t.string "first_name", :limit => 25 
     t.string "last_name", :limit => 50 
     t.string "email", :default => ' ', :null => false 
     t.string "birthday" 
     t.string "subjects" 
     t.string "teachers" 
     t.string "username", :limit => 25 
     t.string "password_digest" 
     t.timestamps 
    end 

Учителя:

def up 
    create_table :teachers, :id => false do |t| 
     t.integer "teacher_id", :primary_key => true 
     t.string "first_name" 
     t.string "last_name" 
     t.string "email", :default => ' ', :null => false 
     t.string "birthday" 
     t.string "subjects" 
     t.string "username", :limit => 25 
     t.string "password_digest" 
     t.timestamps 
    end 

Предметы:

def up 
    create_table :subjects, :id => false do |t| 
    t.integer "subject_id", :primary_key => true 
    t.string "subject_name" 
    t.timestamps 
    end 
end 

администраторы Пользователи:

def up 
    create_table :admin_users, :id => false do |t| 
    t.integer "admin_user_id", :primary_key => true 
    t.string "username", :limit => 25 
    t.string "password_digest" 
    t.timestamps 
    end 
end 

Итак, теперь позвольте мне пройти через объяснения. В основном:

  • один студент может иметь много учителей
  • один учитель может иметь много студентов
  • один студент может иметь много предметов
  • один учитель может преподавать многие предметы
  • администратор может получить доступ ко всем это (создать, отредактировать, удалить)

Я создал эти поля и настроил их на своих моделях следующим образом:

class Student < ApplicationRecord 

    has_and_belongs_to_many :subjects 
    has_and_belongs_to_many :teachers 
    has_many :admin_users 
    has_secure_password 
    self.primary_key = :student_id 

end 

class Teacher < ApplicationRecord 

    has_and_belongs_to_many :subjects 
    has_and_belongs_to_many :students 
    has_many :admin_users 
    has_secure_password 

end 

class Subject < ApplicationRecord 

    has_and_belongs_to_many :students 
    has_and_belongs_to_many :teachers 
    has_many :admin_users 

    # scope :search, lambda { |query| where(["name LIKE ?", "%#{query}%"])} 

end 

class AdminUser < ApplicationRecord 

    has_secure_password 

    scope :newest_first, lambda { order("created_at ASC") } 
    scope :oldest_first, lambda { order("created_at DESC") } 
    # scope :search, lambda { |query| where(["name LIKE ?", "%#{query}%"])} 
end 

Теперь я вручную ввел данные о записи данных mysql, а затем попытался вытащить записи для полей студентов и преподавателей.

Как я могу эффективно управлять своей базой данных учителями, учениками и субъектами? Есть ли что-то, что мне нужно сделать, прежде всего, чтобы сопоставить таблицы, которые у меня есть? Пожалуйста помоги. Извините, за длинную статью. Я новичок здесь. Цените свое объяснение (термин непрофессионала) и ответы.

Проверьте мои модели. Нужно ли создавать отдельную таблицу для корреляции учителей, студентов и предметов?

Сторона Примечание: Когда я подтягиваю свое поле студентов и учителей, это дает мне ошибку ActiveRecord_Associations_CollectionProxy:0x007f9c504361d0 ОШИБКА.

+0

вас есть 't.string "учителей"' в студенческой таблице. Что вы ожидаете от возвращения ученика? –

+0

Hi Pardeep Dhingra, я редактировал мой вопрос извините. Смущенно. –

+0

Проверьте мои модели. Нужно ли создавать отдельную таблицу для корреляции учителей, студентов и предметов? –

ответ

3

Я думаю, что это отношение должно работать в вашем случае:

студентов:

def up 
    create_table :students, :id => false do |t| 
    t.integer "student_id",:primary_key => true 
    t.string "first_name", :limit => 25 
    t.string "last_name", :limit => 50 
    t.string "email", :default => ' ', :null => false 
    t.string "birthday" 
    t.string "subjects" 
    t.string "username", :limit => 25 
    t.string "password_digest" 
    t.timestamps 
    end 
end 

Ref: Generating auto increment with sequence 1001 Учителя:

def up 
    create_table :teachers, :id => false do |t| 
     t.integer "teacher_id", :primary_key => true 
     t.string "first_name" 
     t.string "last_name" 
     t.string "email", :default => ' ', :null => false 
     t.string "birthday" 
     t.string "subjects" 
     t.string "username", :limit => 25 
     t.string "password_digest" 
     t.timestamps 
    end 
end 

Предметы:

def up 
    create_table :subjects, :id => false do |t| 
    t.integer "subject_id", :primary_key => true 
    t.string "subject_name" 
    t.timestamps 
    end 
end 

Зарегистрировавшиеся Предметы:

def up 
    create_table :enrolled_subjects, :id => false do |t| 
    t.integer "subject_id" 
    t.integer "teacher_id" 
    t.integer "student_id" 
    end 
end 

Модель:

class Student < ApplicationRecord 
    has_many :enrolled_subjects 
    has_many :subjects, through: :enrolled_subjects 
    has_many :teachers, through: :enrolled_subjects  

    def teacher_names 
    self.teachers.map(&:first_name).join(", ") 
    end 
end 

class Teacher < ApplicationRecord  
    has_many :enrolled_subjects 
    has_many :subjects, through: :enrolled_subjects 
    has_many :students, through: :enrolled_subjects 
end 

class Subject < ApplicationRecord 
    has_many :enrolled_subjects 
    has_many :students, through: :enrolled_subjects 
    has_many :teachers, through: :enrolled_subjects 
end 

class EnrolledSubject < ActiveRecord::Base 
    belongs_to :student, foreign_key: :student_id 
    belongs_to :subject, foreign_key: :subject_id 
    belongs_to :teacher, foreign_key: :teacher_id 
end 

Example Repository

+0

Можете ли вы объяснить больше? можете ли вы также разместить Pardeep и изменить мою миграцию, какие поля должны быть там? Нужно ли мне создавать новую таблицу с studend_id, teachers_id и subject_id? –

+0

Также, когда я вручную вставляю данные из mysql, он автоматически заполняет поля преподавателей и предметов, когда учащиеся учатся? –

+0

Не добавляйте данные вручную через mysql. Попробуйте использовать консоль rails для добавления данных. –

Смежные вопросы