9일차: 대학생 데이터(주 데이터)

11207 단어 MySQLRubyRails
이번 수업은 잘못과 오해에 시달렸다.
  • rails new에서 움직이지 않는 문제
  • stopspring을 통해 제거
  • 루비 측에서 정수형을 int로 잘못 써서 발생한 오류

  • ruby의 정수형은integer이고 mysql는int(C++경험상,int가 더 익숙함
  • railsdb:migrate 프레임의 오류
  • 중간 테이블을 먼저 만들었기 때문이다.
  • 중간표는 주표의 id 등을 참조하여 마지막에 만든다.
  • 최적의 데이터 유형을 선택하지 못했습니다
  • 문제 해결 중 Vagrantfile에서 사용할 수 있는 RAM의 크기가 8GB로 변경됨
    vagrantfile
    config.vm.provider "virtualbox" do |vb
        vb.memory = "8192"
        end
    

    사용 환경


    호스트 운영 체제: Windows10 홈 페이지
    가상 환경 운영 체제: Ubuntu Bento/Bionic
    Ruby:2.51
    Rails:5.2.2

    데이터 생성

  • student (id, name,email, gender, age, opinion, updated_at, created_at)
  • ExamResult (id, student, subject, name, score, updated_at, created_at)
  • 중간표
  • Subject (id, name, max_score, updated_at, created_at)
  • ※ 과목의 의미
  • ClubStudent (id, student, club, name, updated_at, created_at)
  • 중간표
  • Club (id, name, updated_at, created_at)
  • 테이블 간의 연관성



    준비


    rails new

    rails new self_univ -d mysql
    
    Gemfile
    gem 'mini_racer', platforms: :ruby
    
    bundle install
    
    qpp/config/database.yml
    password: 
    
    rails db:create
    

    이 단계


    scaffold 컨트롤러와 모델 동시 생성)
    루비의 정수형은integer입니다.
    마지막으로 중간 테이블 만들기
    중간 테이블에서reference를 통해 주 키를 참조하는column을 지정합니다
    - bigint로 자동 설정

    rails g scaffold를 사용하여 만들기

    # Studentテーブル
    rails generate scaffold Student name:string email:string gender:integer age:integer opinion:text
    # Subjectテーブル
    rails generate scaffold Subject name:string max_score:integer
    # Clubテーブル
    rails generate scaffold Club name:string
    # ExamResultテーブル
    rails generate scaffold ExamResult student:references subject:references name:string score:integer
    # ClubStudentテーブル(中間テーブルなので最後
    rails generate scaffold ClubStudent student:references club:references name:string
    

    mysql 측면 반영

    rails db:migrate
    

    테이블 간의 상관성 정의


    참조 필요: 활성 레코드 연관
    일본어 버전 있어요.
    참조: 활동 레코드 연관
    app/models/student.rb
    class Student < ApplicationRecord
      has_many :exam_results
      has_many :subjects, through: :exam_results
      has_many :club_students
      has_many :clubs, through: :club_students
    end
    
    app/models/subject.rb
    class Subject < ApplicationRecord
      has_many :exam_results
      has_many :students, through: :exam_results
    end
    
    app/models/exam_result.rb
    class ExamResult < ApplicationRecord
      belongs_to :student
      belongs_to :subject
    end
    
    주 키 측의 설정 결과로 인해 중간 테이블 측의 설정이 자동으로 변경되었다
    app/models/club.rb
    class Club < ApplicationRecord
      has_many :club_students
      has_many :students, through: :club_students
    end
    
    app/models/club_student.rb
    class ClubStudent < ApplicationRecord
      belongs_to :student
      belongs_to :club
    end
    

    마스터 생성


    학생 테이블로
    console
    (1..100).each do |num|
      if num % 2 == 0
        gen = 0
        ag = 0
        at = 0
      else
        gen = 1
        ag = 1
        at = 1
      end
      op = (0..20).map{('あ'..'わ').to_a[rand(26)]}.join
    
      user = Student.create(name: "taro-#{num}", email: "val-#{num}@gmail.com", gender: gen, age: ag, opinion: op)
    end
    
    클럽 테이블로
    console
    Club.create(name: '自転車')
    Club.create(name: 'サッカー')
    Club.create(name: 'バスケットボール')
    Club.create(name: 'バレーボール')
    Club.create(name: '空手')
    Club.create(name: '水泳')
    Club.create(name: '登山')
    Club.create(name: '陸上')
    Club.create(name: 'バイク')
    Club.create(name: '英会話')
    Club.create(name: 'カメラ')
    Club.create(name: '軽音')
    Club.create(name: 'サーフィン')
    
    테이블로
    console
    Subject.create(name: '数学', max_score: 200);
    Subject.create(name: '国語', max_score: 200);
    Subject.create(name: '英語', max_score: 200);
    Subject.create(name: '化学', max_score: 100);
    Subject.create(name: '物理', max_score: 100);
    Subject.create(name: '生物', max_score: 100);
    Subject.create(name: '世界史', max_score: 100);
    Subject.create(name: '日本史', max_score: 100);
    Subject.create(name: '地理', max_score: 100);
    

    (0..20).map{('아'...'와').to_a[rand(26)]}.join


    이것저것 가득 찼다

    범위 대상


    문자도 쓸 수 있어요.

    맵 방법


    요소의 수량을 반복하여 블록의 반환 값을 집합한 그룹을 만들고 되돌려줍니다.
    collect 방법의 별명입니다.
    # 配列の入った変数.map {|変数名| 処理内容 }
    numbers = ["68", "65", "6C", "6C", "6F"]
    p numbers.map {|item| item.to_i(16) }
    [104, 101, 108, 108, 111]
    #上では16進数を10進数に変換
    

    to_a(Array)


    패턴 객체 복귀

    rand(max)


    max가 0일 때 0.0 이상, 1.0 실수 미만, 정수일 때 0 이상, max보다 작은 정수

    join(sep =)


    join 방법은 그룹의 모든 요소를 문자열로 변환하고 매개 변수sep를 구분자로 조합한 문자열을 되돌려줍니다.
    매개 변수를 생략하면 구분자가 없고 요소가 조합된 문자열이 됩니다

    연결 여부 확인


    우선,student id에 데이터를 1번으로 삽입해 보십시오.
    railsc 방면에서는 잘하지 못하기 때문에 mysql 방면에서.
    mysql
    INSERT INTO exam_results (student_id,subject_id,name,score,created_at,updated_at) VALUE 
    (1,1,'一次試験',181,now(),now()),(1,2,'一次試験',146,now(),now()),(1,3,'一次試験',199,now(),now()),(1,4,'一次試験',99,now(),now()),(1,5,'一次試験',62,now(),now()),
    (1,6,'一次試験',83,now(),now()),(1,7,'一次試験',62,now(),now()),(1,8,'一次試験',77,now(),now()),(1,9,'一次試験',81,now(),now());
    
    console
    stu = Student.first
    stu.exam_results
    
    # 結果
    # 分かりづらいので、4教科目以降省略、および編集
     stu = Student.first
    SET NAMES utf8,  @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'),  @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
      Student Load (0.2ms)   
    => #<Student id: 1, name: "taro-1", email: "[email protected]", gender: 1, age: 1, opinion: "すぎこじぅかいけさぎさあえぃざきこぎごえぎ", created_at: "2019-03-16 11:02:23", updated_at: "2019-03-16 11:02:23">
    
    stu.exam_results
      ExamResult Load (0.2ms)  SELECT  `exam_results`.* FROM `exam_results` WHERE `exam_results`.`student_id` = 1 LIMIT 11
    => #<ActiveRecord::Associations::CollectionProxy 
    [#<ExamResult id: 1, student_id: 1, subject_id: 1, name: "一次試験", score: 181, created_at: "2019-03-16 14:33:04", updated_at: "2019-03-16 14:33:04">, 
    #<ExamResult id: 2, student_id: 1, subject_id: 2, name: "一次試験", score: 146, created_at: "2019-03-16 14:33:04", updated_at: "2019-03-16 14:33:04">, 
    #<ExamResult id: 3, student_id: 1, subject_id: 3, name: "一次試験", score: 199, created_at: "2019-03-16 14:33:04", updated_at: "2019-03-16 14:33:04">,
    
    결과SELECT `students`.* FROM `students` ORDER BY `students`.`id` ASC LIMIT 1SELECT` `exam_results`.* FROM `exam_results` WHERE `exam_results`.`student_id` = 1 LIMIT 11를 사용하면 MySQL에서도 볼 수 있습니다.마땅히
    MySQL
    
    SELECT students.* FROM students ORDER BY students.id ASC LIMIT 1;
    +----+--------+-----------------+--------+------+-----------------------------------------------------------------+---------------------+---------------------+
    | id | name   | email           | gender | age  | opinion                                                         | created_at          | updated_at          |
    +----+--------+-----------------+--------+------+-----------------------------------------------------------------+---------------------+---------------------+
    |  1 | taro-1 | [email protected] |      1 |    1 | すぎこじぅかいけさぎさあえぃざきこぎごえぎ                      | 2019-03-16 11:02:23 | 2019-03-16 11:02:23 |
    +----+--------+-----------------+--------+------+-----------------------------------------------------------------+---------------------+---------------------+
    
    
    SELECT exam_results.* FROM exam_results WHERE exam_results.student_id = 1 LIMIT 11;
    +----+------------+------------+--------------+-------+---------------------+---------------------+
    | id | student_id | subject_id | name         | score | created_at          | updated_at          |
    +----+------------+------------+--------------+-------+---------------------+---------------------+
    |  1 |          1 |          1 | 一次試験     |   181 | 2019-03-16 14:33:04 | 2019-03-16 14:33:04 |
    |  2 |          1 |          2 | 一次試験     |   146 | 2019-03-16 14:33:04 | 2019-03-16 14:33:04 |
    |  3 |          1 |          3 | 一次試験     |   199 | 2019-03-16 14:33:04 | 2019-03-16 14:33:04 |
    |  4 |          1 |          4 | 一次試験     |    99 | 2019-03-16 14:33:04 | 2019-03-16 14:33:04 |
    |  5 |          1 |          5 | 一次試験     |    62 | 2019-03-16 14:33:04 | 2019-03-16 14:33:04 |
    |  6 |          1 |          6 | 一次試験     |    83 | 2019-03-16 14:33:04 | 2019-03-16 14:33:04 |
    |  7 |          1 |          7 | 一次試験     |    62 | 2019-03-16 14:33:04 | 2019-03-16 14:33:04 |
    |  8 |          1 |          8 | 一次試験     |    77 | 2019-03-16 14:33:04 | 2019-03-16 14:33:04 |
    |  9 |          1 |          9 | 一次試験     |    81 | 2019-03-16 14:33:04 | 2019-03-16 14:33:04 |
    +----+------------+------------+--------------+-------+---------------------+---------------------+
    

    좋은 웹페이지 즐겨찾기