> For the complete documentation index, see [llms.txt](https://simian114.gitbook.io/blog/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://simian114.gitbook.io/blog/undefined-1/diary/2020/12/20201230.md).

# 20201230(수)

## 2020-12-30

### 1. 학습 날짜

* 2020-12-30

### 2. 학습 시간

* 09:30 \~ 22:00

### 3. 학습 범위 및 주제

* 루비온레일즈 라우팅, 간단한 사이트 만들어보기

### 4. 학습 목표

* 페펙트 루비 온 레일즈 7장
* 간단한 사이트 만들어보자

### 5. 과제 제출

* x

### 6. 상세 학습 내용

* 어제 학습했던 라우팅 복습
* 간단한 사이트 만들어보기
  * 목표: 게시물을 작성하는 사이트. 기본적으로 게시글을 쓰기 위해서는 로그인을 해야함. 단순히 글을 읽기 위해서는 로그인을 할 필요는 없음
  * 로그인, 로그아웃 버튼을 기본 레이아웃으로 적용한다. 만약 로그인이 되어있다면 `로그아웃` 버튼이 나오고 반대로 로그인이 되어있지 않다면 `로그인` 버튼이 나온다.
  * 오늘은 로그인 기능까지만 구현했다.
  * 시행착오
    * 이전까지 계속 `scaffolding` 기능으로 모델, 컨트롤러를 한번에 만드는 버릇이 들어서인지 생각보다 모델과 컨트롤러를 만드는게 쉽지는 않았다. 따라서 간단한 rails 명령어를 다시 학습해야만 했다.
    * 프로젝트 경로 이름에 한글이 들어가면 안된다. 이 문제 때문에 몇 시간을 날렸다 하하
    * `erb` 파일에서 `password` 필드는 배열의 행태로 들어온다. `params[:password]` 는 통상적으로 `string`으로 생각하기 쉽지만 `array`의 형태다!
    * 컨트롤러에서 `render plain:` 등을 사용하면 `html` 파일을 렌더링하지 않기 때문에 기본 `layout` 이 적용되지 않는다.
    * scaffold로 모델, 컨트롤러, 뷰를 만들면 `_from_...` 파일에 `form_with (model: user)`가 있다. 이 파일은 `new`와 `edit` 두개에서 공통으로 사용된다. 하지만 이 둘의 행동은 달라야 하는데 어떻게 구분하는걸까?
      * 인자로 들어온 `model` 를 보고 구분한다. 만약 `new`에서 렌더링된거라면 `user`는 비어있다. 따라서 `form_with`는 RESTful하게 알아서 `create` 메서드를 호출하게 만들고, 비어있지 않다면 자연스럽게 \`edit으로 액션을 정한다.
    *

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

* 흠.. 오늘은 나쁘지 않게 학습한 것 같다. 내일은 더 열심히 해봐야겠다.

### 8. 다음 학습 계획

* 게시물 작성
  * 로그인 유무에 따라 동작을 다르게
* 유저 생성 보강하기
  * 비밀번호는 두 번 입력하게 만들기
  * 비밀번호 보안 처리 하기
* 리뷰 기능 구현하기
  * 리뷰는 유저와 게시물에 belongs\_to 되게 만들자.
