
Migration?
SQL문을 대신 작성해주는 루비 코드
DB 스키마 버전 관리 시스템
https://rubykr.github.io/rails_guides/migrations.html

터미널에 아래 구문 작성
[rails 1.2.6]
ruby script/generate migration 파일명
[rails 6 ruby 2.7.7]
rails g migration 파일명
models와 migration을 동시에 생성하는 방법이다.
migration만 생성하면 새로운 테이블 수정 삭제 코드 및 기존에 만들어진 테이블의 수정 삭제 코드를,
models를 생성하면 새로운 테이블의 수정 삭제 코드를 작성할 수 있다.

터미널에 아래 구문 작성
ruby script/generate model table명

config 폴더 > database.yml의
development: 이하에 위 예시와 같이 database, username, password 지정
터미널에서 아래 구문 작성
mysql -유저명 -비밀번호
// ex) mysql -root -pass1234

3. 실제 적용된 sql 구문이 보고 싶을 경우, 터미널에서 아래 구문 작성
tail -f development.log
migrate 이하의 파일을 열어 아래 구문을 추가로 작성한다.
create_table :'테이블 명' do |함수명|
함수명.column :'column명', :'타입지정', :'추가사항'

| 작성법 | 의미 |
|---|---|
:integer | 정수 |
:float | 실수 |
:text | 문자열 |
:boolean | 참/거짓 |
:date | 날짜 |
:time | 시간 |
| 작성법 | 의미 |
|---|---|
:null => false | null 불가능 |
:default => 1 | 기본값 = 1 |
https://rubykr.github.io/rails_guides/association_basics.html

생성 구문 작성
위 참고
추가 구문 작성
add_column :'작성할 테이블 명', :'column 명' , :'타입지정'

위와 같이 생성된다.
self.up에 add_column을 작성했을 경우
self.down에는 remove_column을 작성해야한다.


User에 has_many :cars를 걸었더니 Car의 attributes에 user_id가 추가되었다.
Car에 belongs_to :user가 걸려있을 것이다.
User에 belongs_to :parent를 걸었더니 User의 attributes에 parent_id가 추가되었다.
Parent에는 has_many :users가 걸려있을 것이다.
| 작성법 | 작성할 위치 | 단수/복수 |
|---|---|---|
| belongs_to :B | 외래 키B가 이 클래스의 테이블에 있음 | 단수 |
| has_one :B | 이 클래스를 참조하는 다른 테이블에 외래 키B 가 있음 | 단수 |
| has_many :B | 이 클래스를 참조하는 다른 테이블에 외래 키B 가 있음 | 복수 |
| has_many: through B | B “객체의 예를 통해서 여러개 가진다” | |
| has_one :through B | B “객체의 예를 통해서 하나 가진다” | |
| has_and_belongs_to_many B | B “객체의 예에 속해 있으면서 동시에 B 객체의 예를 많이 가진다” |
belongs_to :B, :class_name => "참조할 테이블", "내 테이블의 자식 column"
belongs_to :B, optional: true
null이 될 수 도 있는 연결 값에 optional : true를 지정한다.

터미널에서 아래 구문 작성
rake db:migrate
remove_column :'column명', :'column명'
drop_table :'테이블 명'
Controller에서 DB의 데이터 값에 관여하고자 할 때 작성하는 구문
변수명 = "테이블명".find # find/ count
:all, # all/first
:conditions => "조건",
:limit => 숫자,
:order => " DESC/ASC" #DESC/ASC
ruby script/console

터미널 혹은 Ruby 파일 내에서 작성
변수 = 테이블명.new
변수.column명 = "새로 넣어줄 값"
변수명.save
변수명.destroy
변수 = "테이블명".count
:all,
:conditions => "조건"
| 작성법 | 의미 |
|---|---|
| 변수 = 테이블명.find :all | 찾아서 나오는 전체 찾기 |
| 변수 = 테이블명.find :first | 찾아서 나오는 하나 찾기 |
| 변수 = 테이블명.count :all | 찾아서 나오는 전체 결과 세기 |
| 변수 = 테이블명.find :all :conditions => "id=1" | 조건문을 충족하는 경우 찾기 |
| 변수 = 테이블명.find :all :order => "id desc" | id 오름차순으로 찾기 |

받아온 데이터의 .target_user (model에 연결키 지정이 되어있음)값을 배열에 넣고자 할 때,
위와 같은 방법을 사용하면 데이터의 갯수만큼 데이터를 뽑아오게된다.

하지만 :include => :연결키 를 지정해주면 실행값은 똑같아 보이지만
DB상에서 1번만 데이터를 뽑아온다. = 최적화가 된다.
❗Con 뿐만 아니라 View에서도 DB데이터로 받아온 것을 반복문 돌릴 경우, 해당 작업을 해주는 편이 좋다.

여러개를 include할 때에는 []로 묶는다.

연결 키를 여러번 거칠 때에는 화살표 함수를 사용한다 :함수 => :함수

이렇게 include로 연결할 경우, Sql문 상에서 테이블 명에 AS를 붙여 테이블명을 임의 지정하므로 order와 같이 sql문에 영향을 끼치는 구문을 작성할 때에는 As로 바뀐 테이블명을 작성해주어야한다.
데이터를 받아온 뒤인 View에서는 @logs.name과 같이 사용할 수 있다.

id와 같이 연결한 테이블과 연결되는 테이블 둘 다 갖고 있는 column명을 조건으로 줄때에는, 해당 column이 어떤 테이블의 column인지 명시해주어야한다.
User의 id라면 => users.id
이런 유용한 정보를 나눠주셔서 감사합니다.