본문으로 바로가기

[ROR] 프로젝트를 restful 하게 만들어보자 !

category Dev/Ruby on Rails 2018. 2. 12. 02:50

Ruby on Rails - restful





- RESTful ?


Representational State Transfer 이란 뜻인데 더 알기 쉽게 말하자면 '무엇을 어떻게 할지 표현' 입니다

여기서 무엇은 resource 이고 어떻게는 HTTP method 입니다



- Routes 작성하기



잉... 저희가 봐왔던 routes 코드와는 다르다는 것을 알 수 있습니다


resoureces :posts

이 한줄로 Get / Post / Put / Patch / Delete 의 method 를 rails 에서 자동으로 지정을 해주게 됩니다

이 때 저희는 URL 이 아닌 PATH 로 접근할 수 있습니다 !


$ rake routes



- View / Controller 작성하기


new 와 edit 는 입력한 값을 create / update 로 보내는 것과 value 값을 채워놓냐의 차이 빼고는 동일합니다

따라서 _form.html.erb 파일을 이용하여 중복된 내용을 작성한 뒤 <%= render 'form' %> 으로 렌딩을 합니다


그리고 여기서는 form_for 라는 ruby 문법을 사용합니다



      



_form.html.erb

1
2
3
4
5
<%= form_for @post do |f| %>
  제목 : <%=f.text_field :title%> <br> <br>
  내용 : <%=f.text_area :contents, cols: 50, rows: 5%> <br> <br>
  <%=f.submit%>
<end %>
cs


new.html.erb

1
2
<h1>새글 쓰기</h1>
<%= render 'form' %>
cs


edit.html.erb

1
2
<h1>수정 하기</h1>
<%= render 'form' %>
cs



이제 컨트롤러를 하나하나 보겠습니다



posts_controller.rb

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
class PostsController < ApplicationController
  before_action :set_post, only: [:show,:edit,:update,:destroy]
 
  def index
    @posts = Post.all
  end
 
  def show
  end
 
  def new
    @post = Post.new
  end
 
  def create
    @post = Post.new(post_params)
    if @post.save
      redirect_to @post, notice: "Success!"
    else
      render :new
    end
  end
 
  def edit
  end
 
  def update
    if @post.update(post_params)
      redirect_to @post, notice: "Success!"
    else
      render :edit
    end
  end
 
  def destroy
    @post.destroy!
    redirect_to root_path
  end
 
  private
  def set_post
    @post = Post.find(params[:id])
  end
 
  # Strong Parameters
  def post_params
    params.require(:post).permit(:title, :contents)
  end
end
cs


일단 가장 먼저 :set_post 란 메소드가 있습니다

이건 @post = Post.find(params[:id]) 란 코드가 중복되니 따로 메소드로 관리를 하겠다는 뜻입니다




그 다음 post_params 메소드는 Strong Parameter 입니다


              






index.html.erb

1
2
3
4
5
6
7
8
9
10
11
12
<h1>포스트페이지</h1>
<%= link_to new_post_path do %>
  <button>새글쓰기</button>
<end %>
<hr>
 
<% @posts.each do |p| %>
  <p>제목 : <%=p.title%></p>
  <p>내용 : <%=p.contents%></p>
  <%= link_to "[글보기]", p %>
  <hr>
<end %>
cs


show.html.erb

1
2
3
4
5
<h1>글보기</h1>
<p>제목 : <%= @post.title %></p>
<p>내용 : <%= @post.contents %></p>
<%= link_to "[수정]",edit_post_path %>
<%= link_to "[삭제]",post_path, method: 'delete', data: {confirm: "정말로 삭제하시겠습니까?"} %>
cs



이런식으로 프로젝트를 완성하면 restful 한 CRUD 게시판을 완성할 수 있습니다 !