[Ruby On Rails] DB에 칼럼 추가하기(+오류메세지 해결)

sunaaa·2021년 4월 17일
3

Ruby On Rails

목록 보기
15/20
post-custom-banner

✍ DB에 칼럼 추가하기

DB에 칼럼을 추가하거나 지우기 위해서는 두 가지 방법이 있다.
롤백시키는 방법과 마이그레이션 파일을 새롭게 만드는 방법이다.

자세한 설명은 여기로
간략히 설명하자면,
1. 롤백은 rails db:rollback 명령어로 실행할 수 있으며, 아직 깃헙저장소에 올라가서 반영이 되지 않았을 경우 + 내가 갖고 있는 데이터가 별로 없고 그 데이터가 별로 중요하지 않을 경우 선택하는 방법이다.
2. 추가적인 마이그레이션 파일을 만드는 명령어는 rails g migration change_columns_from_options이다.

  • 이때 레일즈 컨벤션을 시켜주는게 중요하다. add/change/delete 등 할 일을 앞에 적어주고, 어떤 칼럼을 변경할 것지 적어주고(이 부분은 자유다. 간단히 해도 되고 상세하게 해도 된다) 마지막에 to/from 등 수정할 DB명을 적어준다.

💾 DB에 칼럼 추가하기 : 마이그레이션 파일 생성

  • 상품 DB에 칼럼을 추가하고자 한다.
  • 내 경우, 아이템을 만든 마이그레이션 파일 뒤로 여러개의 마이그레이션 파일이 쌓였기 때문에, 추가적인 마이그레이션 파일을 통해 DB를 수정하고자 한다.
  • 마이그레이션 파일 안에서 수정해도 되고, 처음부터 명령어를 쳐서 생성해도 된다.
  • 마이그레이션 파일로 원하는 부분을 수정한 뒤, 수정이 완료되어 DB에 반영하고 싶다면 rails db:migrate 명령어를 쳐주면 된다.

💾 DB에 FK 칼럼 추가하기

  • 상품 DB가 서브카테고리를 참조하도록 하려한다.
    -FK를 추가해주고, index도 넣어준다
 add_reference :items, :sub_category, index: true
 add_foreign_key :items, :sub_categories

💥 오류 해결하기

아래와 같이 쳤더니 마이그레이션 파일은 잘 만들어졌다.

🙄 그런데 db:migrate를 하자 아래와 같은 오류 메세지가 떴다! 무엇이 문제일까??

오류메세지 : Getting Rails error “syntax error, unexpected tSYMBEG, expecting keyword_do or '{' or '('”

https://stackoverflow.com/questions/24224007/getting-rails-error-syntax-error-unexpected-tsymbeg-expecting-keyword-do-or

데이터타입 뒤에 간간히 붙어있는 쉼표가 문제였다.하핫...👀

  • 마이그레이션 파일에서 수정하다가(이 때는 쉼표를 넣어줘야함) 터미널에서 컬럼값과 타입까지 한번에 입력하려 하다보니 습관적으로 쉼표를 쳤다.
    • 마이그레이션 파일에서 수정할 때는 add_column :items, :sub_name, :string 형식으로 입력해줘야 하고,
    • 터미널에서 레일즈 명령어로 입력할 때는 rails g migration AddGemToItems sub_name:string thumbnail_image:string 라는 형식으로 작성해야 하며, 쉼표를 넣으면 안된다.

마이그레이션 파일에서 불필요한 쉼표를 지워주었다.

다시 마이그레이트하자 성공 메세지가 떴다. 야호 ~ 🤗

마지막으로 DB가 잘 변경되었는지 db/schema.rb 스키마 파일을 꼭 확인해주자.
추가한 칼럼들이 잘 들어간 것을 확인할 수 있다

🎁 미래의 나에게 남겨두는 참고자료

column에 데이터를 배열로 넣는 방법

1.배열 속에 들어갈 데이터의 타입으로 먼저 column을 생성한다.
2.이 기본타입 데이터를 array로 변경하는 것은 사용하는 DB에 따라서 조금씩 방법이 다른데,
2-1. 우선 DB가 PostgreSQL인 경우에는 db>migrate>2017...._create_users.rb 파일로 들어간다. 만들어진 column들을 보고 그 중에서 array로 만들 column 뒤에 , array: true, default: [] 을 직접 작성한다.
2-2. DB가 sqlite3인 경우에는 app>models>users.rb 파일로 들어간다. 미리 정의되어있는 클래스 안에 serialize :tags, Array 라고 작성한다.
3.각각 DB에 맞게 설정을 했으면 $ rake db:migrate를 한다.
4.DB가 잘 만들어졌는지 확인한다(스키마 파일 확인 or dbconsole에서 확인 or irb 실행시켜서 확인).

DB구조 확인하는 방법

  • 스키마(schema) 파일 확인하기
    레일즈에서 rails generate 명령어로 모델을 생성하면, schema라는 파일이 자동으로 생성된다. 레일즈에서 schema는 설계도라기보다는 만들어진 것을 확인하는 기록용 도면에 가깝다. 스키마 파일이 DB의 구조를 표시하고있는 것은 맞지만, 스키마 파일은 수정할 수 없고 스키마를 토대로 만드는 것이 아니다. 스키마는 오히려 만들어진 것을 확인하는 용도다.

  • 스키마 파일 말고도 DB구조를 확인할 수 있는 방법이 몇가지 더 있었다.
    1) rails dbconsole을 사용해서 sql client를 실행해서 들어가보는 방법
    2) rails c를 사용해 레일즈 콘솔인 irb로 들어가서 값을 넣어보고 어떻게 들어가는지 확인해보는 방법

profile
Be Playful Front-end Developer
post-custom-banner

2개의 댓글

comment-user-thumbnail
2021년 4월 18일

루비 온 레일즈 글이 많이 올라오네요 ~~ 루비 온 레일즈 공부 할 만한가요 ?? 그냥 노드 하면 안 되나용 ?

1개의 답글