CRUD without Scaffolding
CRUD 기능을 구현할 때 가장 중요한 것이 바로 라우팅 작업일 것입니다. 기본적이 라우팅 경로는 다음과 같습니다.
CRUD without Scaffolding
CRUD 기능을 구현할 때 가장 중요한 것이 바로 라우팅 작업일 것입니다. 기본적이 라우팅 경로는 다음과 같습니다.
경로와 해당 경로의 요청을 처리하는 컨트롤러와 액션의 이름이 같아면 액션은 따로 작성해주지 않아도 됩니다.
'posts/index' => 'posts#index'
컨트롤러-액션 생략new
는 새로운 글을 작성하는 폼이 있는 페이지로 가는 것이기 때문에 get
이고 create
는 해당 폼에서 입력된 값들이 body에 담겨져 오면 해당 값들을 데이터베이스에 저장하는 역할을 하기 때문에 post
를 통해 요청을 보냅니다.
글을 작성하면 이를 저장하기 위한 데이터베이스 모델이 필요합니다. 다음 명령어를 통해 모델을 만들어 줍니다.
rails g model Post title:string content:text
아직 모델이 완성된 것이 아닙니다. 이것은 일종의 이렇게 만들 것이다 라는 주문서와 같은 것이고 이제 실제로 주문서를 제출하고 모델을 만들라는 명령을 해주어야합니다.
rake db:migrate
db/migrate/
에 있는 파일들에서 오류에 대한 사항을 확인해보시기 바랍니다.이제 사용자의 요청에 따른 처리를 해줄 컨트롤러를 생성합니다.
rails g controller Posts index show new create edit update destroy
Posts
컨트롤려 명 뒤에는 만들고 싶은 액션들을 나열해줍니다. 필수 사항은 아니지만 위의 예시처럼 나열해준다면 액션과 이에 해당하는 뷰들도 같이 생성해주기 때문에 편리합니다. 이제 본격적으로 CRUD를 만들어보도록 하겠습니다.
먼저 index.html.erb
에서는 글의 목록을 보여줄 것이고 이에 대한 처리는 index
액션에서 해주어야 합니다. 먼저 이에 앞서 샘플 데이터를 콘솔을 통해 넣겠습니다. 프로젝트의 루트 폴더로 들어가서 다음과 같은 명령어를 입력하고 데이터를 추가합니다.
rails c
Post.connection
Post.new(title: "title-1", content: "content-2").save
rails c
는 레일즈의 콘솔에 접속한다는 의미입니다.Post
모델에 연결을 시도합니다.title-1
과 content-2
라는 예제 데이터를 넣고 저장합니다.이제 본격적으로 액션을 작성해보도록 하겠습니다.
@변수명
을 통해 액션에서 뷰로 데이터를 넘겨줄 수 있고 Post
의 모델의 모든 튜플(데이터)를 넘겨주기 위해서는 Post.all
을 이용합니다.each do
문을 통해 @posts
에 담겨져 넘어온 데이터들을 하나씩 post
에 담아 이를 출력해줍니다.이젠 글을 상세히 보러 들어가보도록 하겠습니다. 어떤 글을 볼 것인가는 모델에 저장할 때 자동으로 부여되는 id
값을 이용해 접근할 것입니다. 위의 "보기" 버튼의 링크 주소를 보시면 클릭할 글의 데이터의 아이디가 경로에 포함되어 있습니다. 이렇게 내용을 보고싶은 글의 id
를 넘기면 액션에서 받아서 적절히 처리해줍니다.
show
액션에서 쿼리의 파라미터로 넘어온 id 값을 이용해 해당 데이터를 찾아 @post
에 담아 뷰로 넘깁니다.@post
를 사용해 title
과 content
를 출력해줍니다.지금 작성하는 CRUD에서는 new
액션에서는 따로 넘겨주어야 할 것이 없습니다. 그렇기 때문에 new.html.erb
를 작성하도록 하겠습니다.
hidden_field_tag
를 통해 보이지 않는 필드를 추가하고 여기에 인증 토큰을 넣어 글을 저장하는 액션으로 넘길 때 같이 넘깁니다. 레일즈에서는 위와 같이 post
액션에 대해서는 보안 토큰이 필요합니다. 이에 대해서는 추후에 자세히 다루도록 하겠습니다.이젠 /posts/create
로 넘겨진 데이터를 create
액션에서 처리하도록 하겠습니다.
title
과 content
를 각각 params[:title]
과 params[:content]
를 통해 접근하여 이를 생성한 빈 데이터 박스인 @post
에 넣고 .save
를 통해 저장합니다.이젠 글을 수정할 차례입니다. show.html.erb
에 수정하기 버튼이 있고 수정하는 페이지의 요청 경로는 다음과 같습니다.
<a href="/posts/<%=@post.id%>/edit">수정</a>
수정은 edit
액션부터 작성해보도록 하겠습니다.
/posts/:id/edit
경로로 접근하면 id
에 해당하는 데이터를 먼저 찾고 edit.html.erb
로 넘겨줍니다.@post
를 이용해 미리 채워둡니다. post
메소드로 update
경로로 넘어가 update
액션이 처리하게 됩니다.new
에서와 마찬가지로 post
로 값을 넘기기 때문에 hidden_field_tag
를 통해 인증 토큰을 넘겨주어야 합니다.create
에서와는 다르게 @post = Post.find(params[:id])
를 통해 수정해 줄 데이를 찾고 그 위에 새롭게 입력된 데이터를 덮어씁니다. @post = Post.new
를 하게 되면 새로운 데이터를 추가하는 것이기 때문에 수정과 맞지 않습니다.글을 삭제하는 것을 마지막으로 기본적인 CRUD를 마무리하도록 하겠습니다.
show.html.erb
의 삭제 버튼의 링크 경로를 보면 다음과 같습니다.
<a href="/posts/<%=@post.id%>/destroy">삭제</a>
먼저 액션을 코드를 작성해주도록 하겠습니다.
id
값으로 id
에 해당하는 데이터를 지우고 사용자를 글의 목록을 보여주는 페이지로 보냅니다.[Rails] OAuth2.0 with Google (3) | 2018.02.28 |
---|
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |