한 눈에 읽는 루비 온 레일즈
구름에서 제공하는 강의입니다
요청 처 순서
클라이언트는 브라우저로 서버에 요청을 보낸다.
서버는 클라이언트가 요청한 URL을 분석해 라우트를 찾는다.
라우트를 처리하는 컨트롤러와 액션 메서드를 찾는다.
컨트롤러는 모델(DB)에서 요청을 처리할 아이템을 찾는다.
이후 해당하는 아이템을 가지고 view를 만든다.
지금 처리하는 액션메서드의 멤버변수들은 view의 html.erb에서 동적으로 사용할 수 있는 변수다.
컨트롤러에의해 뷰가 만들어지면 이제 클라이언트한테 보낸다.
클라이언트는 만들어진 뷰를 본다.
간단한 페이지 만들어보기
1. 모델 생성
rails generate model Post
생성된 파일을 살펴보자.
db/migrate/xxxx_crate_posts.rb
파일을 열어보자현재 여기에는 틀만 잡혀있을 뿐이다.
만약 틀뿐이 아니라 칼럼들도 미리 생성하고 싶다면 1번에서
rails generate model Post title:string content:text
어땟든 다시 와서 생성하고 싶은 열을 코드로 만든다
마이그레이션 파일에서 테이블의 기본 설정을 정의했으니 이를 실행하여 실제 테이블을 생성
rake db:migrate
결과로
db/schema.rb
가 생성된다.
컨트롤러 생성 & 조금 수정하기
1.rails generate controller posts index new create show
rails generate controller posts index new create show
posts
가 컨트롤러고 뒤에 나오는 이름들은액션 메서드
위처럼 액션 메서드를 인자로 넣어주면
route
,controller
,view
가 자동으로 생성된다. (액션 메서드에 맞게)이후
view
가 필요없는 동작들은 view 파일을 삭제해주자
2. index
를 만들자 (route, action, view 설정)
index
를 만들자 (route, action, view 설정)config/routes.rb
는 앞에서 액션 메서드를 인자로 주어서 자동으로 생성된다.다만
root
는 생성이 안됐으므로root 'posts#index'
를 입력해주자posts#index
에서posts
는 컨트롤러,index
는 액션메서드를 뜻한다.이제
index
액션 메서드를 만들자.app/controller/posts_controller.rb
에서index
메서드를 수정하면 됨.컨트롤러의 액션 메서드에서 현재 해줄거는
view
파일에서 사용할 변수를 정의해주는것.index
뷰에서 클라이언트한테 보여줄 데이터는 현재 등록된 자료들이다. 즉 등록된 모든 자료들에 대한 변수를 컨트롤러에서 정의해주면 된다.@posts = Post.all
index.html.erb
파일을 수정해주자. 여기서는 반복문을 통해서posts
를 출력하면 됨.
3.new
만들기 (route, action, view 설정)
new
만들기 (route, action, view 설정)new
페이지에서는 액션을 사용하지 않는다.왜? 클라이언트가
주소/new
에 접근했을 때 따로 서버에 저장되어 있는 데이터를 가져오지 않기 때문.index
를 보면index 의 view
에서 모든 저장되어 있는 데이터 라는 변수가 필요하기 때문에 index_action에 변수를 만들어줬다. 하지만new
는 따로 그럴필요가 없기 때문에 따로 건들지 않는다.
view
를 만들어주자. 여기서는 데이터를 넣은 다음에 버튼을 눌러야 하므로html
파일을 양식에 맞게 만들어 주면된다. 여기서 주의할 건<form action="/posts/create" method="POST">
이다. 버튼을 누름으로써post
메써드로/posts/create
주소에 요청을 보내는 것!또한
authenticity_token
을 이용해 보안도 신경씀.
이제 라우트를 수정하자.
config/routes.rb
에 접근하자.create
액션 메서드를 사용할 때는post
http 메서드를 사용한다는 것을 알았으므로 이에 맞게 수정해주자.
4.create
만들기
create
만들기3번에서
new
의 view 파일에서 버튼을 누르면 그 결과로post
http 메서드로/posts/create
로 요청을 보낸다는 것을 알았다.먼저 액션 메서드를 건드려보자
posts_controller.rb
파일에 들어가Post.create()
를 하자.그리고 2번에서
create
는view
가 없어도 되기 때문에 삭제를 했으므로 이 액션메서드를 호출한 이후에는 반드시 다른 view로redirect
가 되어야 한다.이 때 사용하는게 바로
redirect_to
.redirect_to "/posts/index"
로 이동하게 만들자
5.show
만들기
show
만들기show 페이지는 상세보기 페이지다.
현재 존재하는 데이터를 가지고 만든다.
/posts/show/1
처럼 어떤 데이터를 볼건지 명시를 해야한다. 그러면 서버는 들어온 1 을 이용해서 해당하는 데이터를 찾는다. 즉 여기서 액션메서드의 행동이 만들어진다. 액션메서드는 클라이언트가 주소로 보내준 데이터를 가지고 클라이언트가 원하는 데이터를 찾고 변수로 세팅해주는 작업이 필요한 것.먼저
index
파일에서 마지막에a
태그로posts/show/id
로 이동할 수 있게 만들어주자.그리고 route를 설정해주자. 위에서 보았다싶이
posts/show/id
로 요청이 들어오므로 이렇게 요청이 오면posts
컨트롤러의show
메서드를 실행할 수 있게 수정해줘야한다.이후에는 액션 이 때의 액션 메서드를 정의해주자. 위에서 말했다시피 정보를 찾아와야한다.
@post = Post.find(params[:id])
를 해주자.그리고
show html
파일을 수정해주자.
6.edit
, update
edit
, update
먼저 게시글을 수정하는 링크를 생성하자.
index
html 파일을 수정해주자.이제 라우터를 수정하자.
show
처럼edit
또한/posts/edit/:id
와 같이 접근하므로 이 경로에 대해posts#edit
을 할 수 있게 만들면 된다.접근할 수 있는 경로를 만들었으니 이제는 액션 메서드를 수정하자. edit 이라는 건 이미 존재하는 데이터를 가져와서 사용해야 한다. 즉 여기서의 액션 메서드는 현재 id에 해당하는 데이터를 찾는 것이다.
이후로는 view 파일을 수정하면 된다.
new
의 html 파일을 거의 그대로 가져오면 된다. 다른점은이미 데이터가 존재
하므로 이를 처음부터 넣고 시작해야한다는 것이다.그리고 버튼을 누르면
/posts/update/:id
주소로post
메서드로 요청을 할 수 있게 수정해야한다.여기서 주의해야 할 건 수정 버튼을 누르면
/posts/update/:id
로 요청이 간다는 것이다. 따라서 라우트 설정에서 이 부분도 해주자.이후
update
의 액션 메서드를 제대로 수정해주자.post를 찾고 update 를 해주면 된다.
7.destroy
destroy
destroy
는 삭제를 담당한다.먼저 삭제를 할 수 있게 링크를
index
의 html에 만들도록하자.여기서도 주의할 부분이 있는데 특정한 하나를 삭제하는 것이므로
:id
를 신경써서 해야한다.
두 번째로 해야할 건
route
설정이다. 위에서 말했듯이 접근 주소는/posts/destroy/:id
이므로 이 주소로 들어오게 된다면posts#destroy
ㄹ를 할 수 있게 라우트를 설정해주자.접근할 수 있는 경로를 만들었으니 이제 액션을 정의하자.
먼저 해당하는 데이터를 찾고, 그 데이터를
Post
테이블에서 삭제하는 작업이 필요하다. 그리고 인덱스 페이지르redirect_to
하자
Last updated