20210101(금)

새로운 시작. 열심히 하자!

2020-01-01

1. 학습 날짜

  • 2020-01-01

2. 학습 시간

  • 11:00 ~ 14:00, 20:00 ~ 21:30

3. 학습 범위 및 주제

  • 루비온레일즈 간단한 사이트 만들어보기

4. 학습 목표

  • 댓글 기능 추가하기

5. 과제 제출

  • x

6. 상세 학습 내용

  1. 부모를 delete 할 때 모든 has_many를 delete :white_check_mark:

    • has_many :reviews, :dependent => :destroy
  2. 삭제할 때 confimation 이 나오게 만들기 :white_check_mark:

    • <%= link_to 'Delete', post_path(post), data: {confirm: "정말로 삭제?"}, method: :delete  %>
    • 위 처럼 data: {confirm: message} 를 추가시켜주자.

  3. 리뷰를 만들자. :white_check_mark:

    • 리뷰는 post에 달리므로 라우팅을 아래처럼 하자

    • resources posts do
        resources reviews, shallow: true
      end
      • 라우팅 주소의 간소화를 위해 shallow 옵션을 추가함.

    • 리뷰는 기본적으로 로그인을 한 상태에서만 만들수있게하자. :white_check_mark:

  4. 유저 프로필에서 자기 자신 삭제하는 기능 추가하기 :white_check_mark:

  5. 포스트의 페이지네이션 기능 만들기

  6. 유저 프로필에서 리뷰 볼수있게 만들기 :white_check_mark:

  7. 리뷰 카운트 기능 만들기 :white_check_mark:

    • 처음 모델을 만들 때 count 필드를 만들지 않았었다. 따라서 카운트를 하는 필드를 추가해줘야만 했다.

    • 속성 하나만 추가할 때도 rails 명령어를 사용하면 된다.

    • 구체적으로 post 마이그레이션 파일에 reviews_count:integer를 하기위해서는 아래처럼 하면된다.

      rails generate AddReviewsCountToPosts
    • 이후에는 xxxx_create_posts.rb 파일에가서

      • t.integer :reviews_count, default: 0 을 추가해주자

  8. user를 삭제하는데 SQLite3::ConstraintException: FOREIGN KEY constraint failed 예외가 계속 발생 해결 :white_check_mark:

    • 이 예외는 user를 삭제하는데 user 모델이 has_many를 하고 있는 postreview의 의존관계를 명확히 하지 않아서 생기는 문제

    • 내가 의도한 바는 user를 삭제하면 자동으로 postreview 모두 삭제 하는것

      • 이렇게 하기 위해서는 아래와 같은 작업을 해줘야 한다.

        class User    < ApplicationRecord
          has_many :posts, :dependent => :destroy
          has_many :reviews, :dependent => :destroy
          ...
          end
    • 이전에는 reviews 에는 dependent 옵션을 사용하지 않았었다.

  9. 한가지 생각할거리. reviews라는건 post에도 has_many로 되어있는거니깐 user에서는 굳이 has_many reviews를 할 필요 없지 않을까?

    • userhas_many :reviews를 하지 않아도 확인할 수 있는 방법은 존재한다.

    • 다만 그렇게되면 user가 자신이 만든 댓글을 보기 위해서 서버에서 많은 리소스를 소모해야만한다.

7. 오늘 학습 내용에 대한 개인적인 총평

  • 많이 앉아있었지만 오늘도 딴짓을 너무 많이했다.

  • 그래도 내가 생각했던 아주 아주 아주 작은 로직을 구현한점은 칭찬할만하다.

8. 다음 학습 계획

  • 레일즈 테스트, 클라이언트 개발 부분 책 읽기

Last updated