생성, 읽기, 업데이트, 삭제 등을 이해한다.
키워드 : 마이그레이션 파일, db:rake, action, method,
요약 :
<모델>
- 모델을 만들기 ⇒ 어떤 데이터 타입으로 저장할 지, 하는 것!
- 뷰 페이지에서, form으로 url, method 설정
- 모델 마이그레이션
- 실제 데이터를 저장할 때, 데이터 타입, 데이터 이름, 공개 여부 등을 다 설정해줘야 한다.
<데이터의 흐름>
- 모델을 만들어서, 저장할 데이터 타입과 이름을 설정해준다.
- config의 migrate 파일을 수정한다.
- db를 migrate한다.
- 뷰 페이지에서 사용자로부터 입력받은 데이터가 처리되도록 설정해준다.
실습
rails g model Post
<a href="/practice/index">list post</a>
<form action="/practice/create" method="post">
제목: <input type="text" name="title" /> <br />
내용 : <input type="text" name="content" /><br />
<input type="submit" />
</form>
모델 생성
키워드 : each do , create, param
요약 :
- 모델 생성
- migrate 파일 데이터 타입설정
- db 마이그레이트
- create
- views create 정보입력받을 폼 만들기
- controller action 만들기 create
- routes.rb url, 액션연결하기
- index
필기노트
rails g model Post
t.string :title
t.text :content
rake db:migrate
def create
post = Post.new
post.title = params[:title]
post.content = parmas[:content]
post.save
redirect_to '/practice/index'
end
<%= @posts.each do |post| %>
<%= @post.title %> <br>
<%= @post.content %> <br>
<% end %>
update와 destory 이해
키워드 : redirect_to "url", redirect_to :back , edit, Post.find
요약 :
- edit
- 컨트롤러에서 edit액션만들기, 특정 글을 선택
- view 파일은 create와 비슷하게, 다만 form의 action, method 다르게
- routes.rb 설정, /:post_id
- 수정버튼 만들기
- a 태그활용
- view 파일설정
- routes.rb 설정, /:post_id
- 수정버튼 update 되도록 설정
- 필기노트
실습
edit
```
# routes.rb edit 추가
# controller edit 액션추가
# view edit.erb 추가
create와 동일 하게 만듦
# index.erb에 수정 버튼만들기
```
수정파일 만들기
```
# controller edit action에서 수정
def edit
@post = Post.find(params[:post_id])
end
## routes.rb 에서 url로 post_id정보를 전달
get '/practice/edit' => 'practice#edit'
## edit.erb 저장
<form action="/practice/create" method="post">
제목: <input type="text" name="title" /> <br />
내용 : <input type="text" name="content" /><br />
<input type="submit" />
</form>
```
수정버튼 만들어서 수정 처리하기
```
# index.erb 파일에 수정버튼 만들기
<a href="/practice/edit"> 글수정</a><br />
# 컨트롤러에서 데이터 베이스에서 데이터 찾아서 채워주기
edit action
@post = Post.find(params[:post_id])
## routes.rb 수정 :post_id 정보 담아서 보내주도록
get '/practice/edit/:post_id' => 'practice#edit'
## index.erb 파일에서 post.id를 가져오도록 설정
<a href="/practice/edit/<%=post.id %>">
## edit.erb 파일 수정! 인스턴스변수 post를 가져와서 title,content를 가져온다.
value="<%=@post.title%>"/>
value="<%=@post.content%>"/>
```
수정한 내용을 저장한다.
```
# 컨트롤러에서 update 액션만들기
def update
@post = Post.find(params[:post_id])
post.title = params[:title]
post.content = params[:content]
post.save
redirect_to '/practice/index'
end
## edit.erb 수정
<form action="/practice/update/<%=@post.id%>" method="post">
## 에러발생
NameError in PracticeController#update
undefined local variable or method `post' for #<PracticeController:0x00000000011af8>
## update에서는 edit action 처럼 @인스턴스 변수를 쓸 필요가 없다. 그 이유는 인스턴스 변수로, view 파일로 넘겨줄필요가 없기 때문이다.
def update
post = Post.find(params[:post_id])
post.title = params[:title]
post.content = params[:content]
post.save
redirect_to '/practice/index'
end
```
삭제하기
```
# 컨트롤러에 delete action 만들기
def delete
Post.destroy(params[:post_id])
redirect_to :back
end
# routes.rb에 연결해주기
get '/practice/delete/:post_id' => 'practice#delete'
# index.erb에 삭제버튼 만들기
<a href='/practice/delete/<%= post.id%>'>delete </a>
## redirect_to 대신에
redirect_back fallback_location: 'practice/index'
```