Ruby On Rails 이해하기 #3 (CRUD 이해하기)
생성, 읽기, 업데이트, 삭제 등을 이해한다.
키워드 : 마이그레이션 파일, db:rake, action, method,
요약 :
<모델>
- 모델을 만들기 ⇒ 어떤 데이터 타입으로 저장할 지, 하는 것!
- 뷰 페이지에서, form으로 url, method 설정
- 모델 마이그레이션
- 실제 데이터를 저장할 때, 데이터 타입, 데이터 이름, 공개 여부 등을 다 설정해줘야 한다.
<데이터의 흐름>
- 모델을 만들어서, 저장할 데이터 타입과 이름을 설정해준다.
- config의 migrate 파일을 수정한다.
- db를 migrate한다.
- 뷰 페이지에서 사용자로부터 입력받은 데이터가 처리되도록 설정해준다.
실습
# 글을 생성하는 페이지와 read 페이지를 만든다.
## controller에 create action 추가
## view file에 create.erb 추가
## routes.rb URL과 액션 추가
# 우선 모델을 만든다.
rails g model Post
# form 태그 페이지
<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
- 정보 목록 보일 views 파일 수정
필기노트
# 모델 생성
rails g model Post
## DB -> migrate 폴더에 파일 생김
t.string :title
t.text :content
# 모델 쓰기
rake db:migrate
## controller에서 create 액션에 기록 코드 저장
def create
post = Post.new
post.title = params[:title]
post.content = parmas[:content]
post.save
redirect_to '/practice/index'
end
## index에 모든 생성된 글을 보여주는 목록을 만든다.
<%= @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 되도록 설정
- a 태그 액션 바꾸기
- 필기노트
실습
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="<%[email protected]%>"/>
value="<%[email protected]%>"/>
```
수정한 내용을 저장한다.
```
# 컨트롤러에서 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/<%[email protected]%>" 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'
```
Author And Source
이 문제에 관하여(Ruby On Rails 이해하기 #3 (CRUD 이해하기)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@dsts-01/Ruby-On-Rails-이해하기-3-CRUD-이해하기
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
- 실제 데이터를 저장할 때, 데이터 타입, 데이터 이름, 공개 여부 등을 다 설정해줘야 한다.
# 글을 생성하는 페이지와 read 페이지를 만든다.
## controller에 create action 추가
## view file에 create.erb 추가
## routes.rb URL과 액션 추가
# 우선 모델을 만든다.
rails g model Post
# form 태그 페이지
<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>
- migrate 파일 데이터 타입설정
- db 마이그레이트
- views create 정보입력받을 폼 만들기
- controller action 만들기 create
- routes.rb url, 액션연결하기
- 정보 목록 보일 views 파일 수정
# 모델 생성
rails g model Post
## DB -> migrate 폴더에 파일 생김
t.string :title
t.text :content
# 모델 쓰기
rake db:migrate
## controller에서 create 액션에 기록 코드 저장
def create
post = Post.new
post.title = params[:title]
post.content = parmas[:content]
post.save
redirect_to '/practice/index'
end
## index에 모든 생성된 글을 보여주는 목록을 만든다.
<%= @posts.each do |post| %>
<%= @post.title %> <br>
<%= @post.content %> <br>
<% end %>
- 컨트롤러에서 edit액션만들기, 특정 글을 선택
- view 파일은 create와 비슷하게, 다만 form의 action, method 다르게
- routes.rb 설정, /:post_id
- a 태그활용
- view 파일설정
- routes.rb 설정, /:post_id
- a 태그 액션 바꾸기
```
# 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="<%[email protected]%>"/>
value="<%[email protected]%>"/>
```
```
# 컨트롤러에서 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/<%[email protected]%>" 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'
```
Author And Source
이 문제에 관하여(Ruby On Rails 이해하기 #3 (CRUD 이해하기)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dsts-01/Ruby-On-Rails-이해하기-3-CRUD-이해하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)