# 20201231(목)

## 2020-12-31

### 1. 학습 날짜

* 2020-12-31

### 2. 학습 시간

* 11:00 \~ 15:00, 21:00 \~ 22:00

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

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

### 4. 학습 목표

* 로그인한 유저만 게시물 작성할 수 있게 수정하기
* 로그인하면 유저는 자신의 프로필을 볼 수 있게 하기. RESTful을 헤치지 않는 방법으로

### 5. 과제 제출

* x

### 6. 상세 학습 내용

* 로그인한 유저만 게시물 작성할 수 있게 만들기
  * 게시글을 작성하는데 이상하게 계속 예외가 던져진다.
  * 예외의 이름은 `User must exist` 이었다. 스키마 파일을 보고 문제점을 발견했다.
  * 문제는 게시물의 속성으로 `user_id`를 FK로 만들었기 때문이다. 그리고 이 user\_id는 nullable 하지 않으므로 게시물을 작성하기 위해서는 user\_id 값이 항상 채워져야 한다.
  * user\_id 를 채우는데 2가지 문제가 있었다. 하나는 user\_id를 어떻게 가져오냐이고 두 번째는 user\_id를 어떻게 전송하냐
  * 먼저 `user_id`를 가져오는 방법은 현재 `session`을 가져오면 되는 아주 간단한 문제였다. 따라서 `session`을 이용해서 현재 세션의 `user_id`를 가져왔다.
  * `user_id`를 어떻게 `form` 형태로 전송하냐 였는데, 이 또한 간단하게 `hidden_field`를 이용해서 해결했다.
* 로그인 한 상태에서 자신의 profile 보기
  * 기존에 user의 프로필을 보기 위해서는 `/users/1` 처럼 `id`값을 줘서 들어가야만 했다.
  * 만약 로그인한 상태에서 자신의 profile을 보는데도 저런 식으로 `URI`를 입력해서 들어간다? 이건 아름답지 못하다.
  * 보다 아름다운 방법은 뭘까? 내가 생각한 방법은
    * 만약 로그인한 상태라면 `/profile` 에 접속하면 바로 자신의 상태를 볼 수 있는것. 그거야 말로 아름다운 방법이라고 생각한다.
    * 따라서 이런 방법을 정의해줘야 하는데, 어떻게 하면 좋을까?
    * 라우팅을 손보자.
    * `resource profile` 을  선언하고 이 라우팅에 대한 컨트롤러와 액션으로 `user`와 `show`를 연결시켜줬다.
  * 결과 로그인한 상태에서 `/profile`에 접근하면 유저는 자신의 프로필을 `localhost:3000/profile`과 같이 아름다운 모습으로 확인할 수 있다.
* 액티브레코드를 콘솔에서 사용하는 법
  * 오늘 post를 생성하는데 계속 문제가 생겨서(user\_id를 넣지 않아서 생긴 문제였음) 이 문제를 해결하려고 콘솔에서 접근해서 시도를 해보려고 했는데 뭔가 이상했음
  * 원인은 `액티브 레코드`를 사용해서 접근하려고 했는데, 나는 db로 접근했던것
  * `rails dbconsole`로 액티브 레코드를 다루려고 했던것이다.
  * 따라서 조금 알아봤고 터미널에서 액티브 레코드에 접근하기 위해서는 `rails console`을 사용해야함을 알았따.
  * 그리고 이 상태에서의 명령어는 ROR에서 하는것과 똑같이 `new, save, update ...` 등을 이용하면 된다.

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

* 2020년의 마지막날이었다.... 정말 많은 일이 있었다. 이제와서 생각해보면 정말로 많은 기회가 있었다. 그리고 난 그 수많은 기회를 다 날린것만 같다.... 더 열심히 할 수 있었는데 열심히 하지 않았다. 뭔가 죄인이 된 느낌이다. 2021년부터는 더욱 정진해야겠다.

### 8. 다음 학습 계획

* 유저 생성시 보안처리하기
* 리뷰 관련 설계 다시하고 작성하기


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://simian114.gitbook.io/blog/undefined-1/diary/2020/12/20201231.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
