728x90
RubyOnRails Getting Start(Blog ๋ง๋ค๊ธฐ) 2ํธ
๐ผ ์๋ก
- RubyOnRails Getting Started ์ ์๋ ๊ฐ๋จํ ๊ฒ์ํ CURD ๋ฐ ๋๊ธ ๊ธฐ๋ฅ๊น์ง ๊ฐ๋ฐํ ๋ด์ฉ์ ๋๋ค
- Ruby version์ 2.6.3์ ์ฌ์ฉํฉ๋๋ค.
- Ruby On Rails version์ 5.2.1์ ์ฌ์ฉํฉ๋๋ค.
๐ Article ์ ์ฒด ์กฐํ
bin/rails routes
๋ก api๋ฅผ ์กฐํํ๋ฉด ์ ์ฒด ์กฐํ API๋ ์๋์ ๊ฐ๋ค.
Prefix Verb URI Pattern Controller#Action
articles GET /articles(.:format) articles#index
- ๊ทธ๋ผ ์ผ๋จ ArticlesController์ index ํจ์๋ฅผ ์ถ๊ฐํ๋ ์์ ๋ถํฐ ์์ํด๋ณด์.
class ArticlesController < ApplicationController
def index
@articles = Article.all
end
end
- all ํจ์๋ฅผ ์ด์ฉํ๋ฉด Article์ ์ ์ฒด ๋ชฉ๋ก์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
- ๋๋ฒ์งธ๋ก ํ ์ผ์ view๋ฅผ ๋ง๋๋ ๊ฒ์ด์ฃ !
index.html.erb
๋ฅผ ๋ง๋ค์ด ๋ด ์๋ค.
<h1>Listing articles</h1>
<table>
<tr>
<th>Title</th>
<th>Text</th>
<th></th>
</tr>
<% @articles.each do |article| %>
<tr>
<td><%= article.title %></td>
<td><%= article.text %></td>
<td><%= link_to 'Show', article_path(article) %></td>
</tr>
<% end %>
</table>
acrticle_path
๋ ํฌํผ๋ก article์ ๊ด๋ จ url์ ์๋ ค์ฃผ๊ฒ ๋ฉ๋๋ค.
๐ ๋งํฌ ์ถ๊ฐ
- ์ง๊ธ๊น์ง ํ๋ ์์ ์ผ๋ก Article ์์ฑ ๋ฐ ์กฐํ๋ฅผํ ์ ์์ต๋๋ค.
- ํ์ ํ๋ root page๋ฅผ ์์ ํด๋๋ก ํ์ฃ .
welcome/index.html.erb
<h1>Hello Rails</h1>
<%= link_to 'My Blog', controller: 'articles' %>
<%= link_to 'New article', new_article_path %>
- ๊ทธ๋ฆฌ๊ณ ์ ์ฒด ์กฐํ view์์ ์๋ก์ด ๊ธ์ ์์ฑํ ์ ์๋๋ก ๋งํฌ๋ฅผ ์ฐ๊ฒฐํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
<h1>Listing articles</h1>
<%= link_to 'New article', new_article_path %>
<table>
<tr>
<th>Title</th>
<th>Text</th>
<th></th>
</tr>
<% @articles.each do |article| %>
<tr>
<td><%= article.title %></td>
<td><%= article.text %></td>
<td><%= link_to 'Show', article_path(article) %></td>
</tr>
<% end %>
</table>
- ์์ฑ ์ค์ ๋ค๋ก ๋์๊ฐ๋ link๋ ์ฐ๊ฒฐํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
<h1>New Article</h1>
<%= form_with scope: :article, url: articles_path, local: true do |form| %> <p>
<%= form.label :title %><br>
<%= form.text_field :title %>
</p>
<p>
<%= form.label :text %><br>
<%= form.text_area :text %>
</p>
<p>
<%= form.submit %>
</p>
<% end %>
<%= link_to 'Back', articles_path %>
- ํ๋์ ๊ธ์ ๋ณด๊ณ ์๋ค๊ฐ ์ ์ฒด ๊ธ์ ํ์ธํ ์ ์๋๋ก ๋งํฌ๋ฅผ ์ฐ๊ฒฐํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
<h1>New Article</h1>
<%= form_with scope: :article, url: articles_path, local: true do |form| %> <p>
<%= form.label :title %><br>
<%= form.text_field :title %>
</p>
<p>
<%= form.label :text %><br>
<%= form.text_area :text %>
</p>
<p>
<%= form.submit %>
</p>
<% end %>
<%= link_to 'Back', articles_path %>
Tip
- ๋์ผํ controller๋ฅผ ์ฐ๊ฒฐํ ๊ฒฝ์ฐ์๋ ์ปจํธ๋กค๋ฌ๋ฅผ ์ค์ ํด์ค ํ์๊ฐ ์์ต๋๋ค.
- ๊ทธ๋ฌ๋
welcome/index.html.erb
์ด ํ์ผ์ ๋ค๋ฅธ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ด ์ค์ ํด์ค์ผ ํฉ๋๋ค.
<%= link_to 'My Blog', controller: 'articles' %>
๐จโโ๏ธ ์ ํจ์ฑ ๊ฒ์ฌ
- ๊ฐ๋จํ๊ฒ ์ ๋ชฉ์ด 5๊ธ์ ์ด์์ด์ฌ์ผ ํ๊ณ ๋น๊ฐ์ด ์๋์ฌ์ผ ํ ๊ฒฝ์ฐ vailidation์ ์์ฑํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
- Article ๋ชจ๋ธ์ ๋ํด validation ์ด๊ธฐ ๋๋ฌธ์ Article ๋ชจ๋ธ ์ฝ๋๋ฅผ ์์ฑํด์ค์ผ ํฉ๋๋ค.
app/models/article.rb
class Article < ApplicationRecord
validates :title, presence: true,
length: {minimum: 5}
end
- ์ดํ์ ๊ธ ์์ฑ์ ํ๋ฉด ์๋์ ๊ฐ์ด ์๋ฌ๋ฉ์์ง๊ฐ ๋ฐ์ํฉ๋๋ค.
- ์ฝ๊ฒ ์๊ฐํ๋ฉด validate๊ฐ ๋์์ง๋ง, ๊ทธ ์ดํ์ ์์ ์ด ์ค์ ๋์ด ์์ง ์๋ค๋ ๊ฒ์ ๋๋ค.
- validate๊ฐ ๋ ๊ฒฝ์ฐ ํ์ ์์ ์ ๋ค์ new view๋ก ๋์๊ฐ๋๋ก ํด๋ณด๊ฒ ์ต๋๋ค.
app/controllers/articles_controller.rb
class ArticlesController < ApplicationController
def new
@article = Article.new
end
def create
@article = Article.new(article_params)
if @article.save
redirect_to @article
else
render 'new'
end
end
def article_params
params.require(:article).permit(:title, :text)
end
end
- ์ ํจ์ฑ ๊ฒ์ฌ ์ดํ์ ์๋ฌ๊ฐ ๋ฐ์ํ ๋ฉ์์ง๋ฅผ view์ ์๋ ค์ค์ผ ํฉ๋๋ค. ๊ด๋ จ ๋ก์ง์ ์์ฑํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
app/views/articles/new.html.erb
<h1>New Article</h1>
<%= form_with scope: :article, url: articles_path, local: true do |form| %>
<% if @article.errors.any? %>
<div id="error_explanation">
<h2>
<%= pluralize(@article.errors.count, "error") %> prohibited
this article from being saved:
</h2>
<ul>
<% @article.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= form.label :title %><br>
<%= form.text_field :title %>
</p>
<p>
<%= form.label :text %><br>
<%= form.text_area :text %>
</p>
<p>
<%= form.submit %>
</p>
<% end %>
<%= link_to 'Back', articles_path %>
- ์๋ฌ ๋ฉ์์ง๊ฐ ์๋ค๋ฉด ์๋ฌ ๋ฉ์์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ฒ ํ์ผ๋ฉฐ, new ํจ์์ @article ๋ณ์๋ฅผ ์ ์ธํจ์ผ๋ก์จ ์ค์ ํ ์ ์๋ค.
- ์์ ๊ฐ์ด ์์๊ฒ ์๋ฌ ๋ฉ์์ง๊ฐ ๋์ค๋๊ฑธ ํ์ธํ ์ ์๋ค.
๐ Article Update
bin/rails routes
๋ก ํ์ํ API๋ฅผ ํ์ธํด๋ณด์.
Prefix Verb URI Pattern Controller#Action
edit_article GET /articles/:id/edit(.:format) articles#edit
article PATCH /articles/:id(.:format) articles#update
articles_controller.rb
class ArticlesController < ApplicationController
def edit
@article = Article.find(params[:id])
end
def update
@article = Article.find(params[:id])
if @article.update(article_params)
redirect_to @article
else
render 'edit'
end
end
private
def article_params
params.require(:article).permit(:title, :text)
end
end
app/views/articles/edit.html.erb
<h1>Edit article</h1>
<%= form_with(model: @article, local: true) do |form| %>
<% if @article.errors.any? %>
<div id="error_explanation">
<h2>
<%= pluralize(@article.errors.count, "error") %> prohibited
this article from being saved:
</h2>
<ul>
<% @article.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= form.label :title %><br>
<%= form.text_field :title %>
</p>
<p>
<%= form.label :text %><br>
<%= form.text_area :text %>
</p>
<p>
<%= form.submit %>
</p>
<% end %>
<%= link_to 'Back', articles_path %>
- model์ @article ์ ๊ฑด๋ค์ฃผ๋ฉด ์๋์ผ๋ก ๊ฐ๋ค์ ์ฑ์ ์ฃผ๊ฒ ๋ฉ๋๋ค.
- ์ ์ฒด ์กฐํ ํ์ด์ง์์ edit๋ ํ ์ ์๋๋ก link๋ฅผ ์ถ๊ฐํด์ค๋๋ค.
<h1>Edit article</h1>
<%= form_with(model: @article, local: true) do |form| %>
<% if @article.errors.any? %>
<div id="error_explanation">
<h2>
<%= pluralize(@article.errors.count, "error") %> prohibited
this article from being saved:
</h2>
<ul>
<% @article.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= form.label :title %><br>
<%= form.text_field :title %>
</p>
<p>
<%= form.label :text %><br>
<%= form.text_area :text %>
</p>
<p>
<%= form.submit %>
</p>
<% end %>
<%= link_to 'Back', articles_path %>
- ๋จ์ผ ๊ธ์ ๋ณด๋ show.html.erb์๋ Edit๋ฅผ ์ถ๊ฐํด์ฃผ๋ฉด ๋์ ๋๋ค.
<p>
<strong>Title:</strong>
<%= @article.title %>
</p>
<p>
<strong>Text:</strong>
<%= @article.text %>
</p>
<%= link_to 'Edit', edit_article_path %>
<%= link_to 'Back', articles_path %>
view ์ค๋ณต ์ ๊ฑฐ
- ์ผ๋จ edit์ new๋ ๊ต์ฅํ ๋น์ทํ๊ฒ ์ฝ๋๊ฐ ์์ฑ๋์ด ์์ต๋๋ค.
- ์ค๋ณต ๋ถ๋ถ๋ง ๋ฐ๋ก ๋นผ๋๋ก ํ๊ฒ ์ต๋๋ค.
app/views/articles/_form.html.erb
<%= form_with model: @article, local: true do |form| %>
<% if @article.errors.any? %>
<div id="error_explanation">
<h2>
<%= pluralize(@article.errors.count, "error") %> prohibited
this article from being saved:
</h2>
<ul>
<% @article.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= form.label :title %><br>
<%= form.text_field :title %>
</p>
<p>
<%= form.label :text %><br>
<%= form.text_area :text %>
</p>
<p>
<%= form.submit %>
</p>
<% end %>
- form_with์ ์ ์ธํ ๋ถ๋ถ์์ ๋ชจ๋ ๋น์ทํ๋ฐ, ์ฌ๊ธฐ์ ๊ณตํต์ ์ธ ๋ถ๋ถ์ @article์ ์ฌ์ฉํ๋ค๋ ์ ์ด๊ธฐ ๋๋ฌธ์ model๋ก ์ ์ธํ๋ฉด Rails๊ฐ ์์์ ์ฌ์ฉํ URI์ ๋ฉ์๋๋ฅผ ์ถ๋ก ํฉ๋๋ค.
app/views/articles/new.html.erb
<h1>New Article</h1>
<%= render 'from' %>
<%= link_to 'Back', articles_path %>
app/views/articles/edit.html.erb
<h1>Edit article</h1>
<%= render 'from' %>
<%= link_to 'Back', articles_path %>
โฐ๏ธ Delete Article
bin/rails routes
๋ก api๋ฅผ ์กฐํํ๋ฉด ์ ์ฒด ์กฐํ API๋ ์๋์ ๊ฐ๋ค.
Prefix Verb URI Pattern Controller#Action
articles DELECT /articles/:id(.:format) articles#destory
articles_controller.rb
class ArticlesController < ApplicationController
def destroy
@article = Article.find(params[:id])
@article.destroy
redirect_to articles_path
end
end
app/views/articles/index.html.erb
<h1>Listing articles</h1>
<%= link_to 'New article', new_article_path %>
<table>
<tr>
<th>Title</th>
<th>Text</th>
<th></th>
</tr>
<% @articles.each do |article| %>
<tr>
<td><%= article.title %></td>
<td><%= article.text %></td>
<td><%= link_to 'Show', article_path(article) %></td>
<td><%= link_to 'Edit', edit_article_path(article) %></td>
<td><%= link_to 'Delete', article_path(article),method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</table>
๐ ๊ฒฐ๋ก
- ๋ฃจ๋น๊ฐ ํ์คํ ๊ธฐ๋ณธ์ ์ธ API๋ค์ ๋ชจ๋ ๋ง๋ค์ด ์ฃผ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ ์์ฐ์ฑ์ ๋์ด๋๊ฒ ๋๋๊ฒ ๊ฐ๋ค.
- ๋ํ Link ์ฐ๊ฒฐ๋ helper๋ค์ด ๋ชจ๋ ๋์์ฃผ๊ธฐ ๋๋ฌธ์ ๊ถ ์ด url์ ๋ช ์ํ์ง ์์๋ ์ฝ๊ฒ ์ค์ ํ ์ ์๋ค๋ ์ฅ์ ์ด ์๊ธฐ๋ ํ๊ฑฐ ๊ฐ๋ค.
- validate๋ ๋ชจ๋ธ์์ ์ฝ๊ฒ ์ ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ข๋ ๋ชจ๋ธ ์นํ์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ ์ ์์๊ฑฐ ๊ฐ๋ค.
- ๋ค์ํธ์์๋ Article CRUD๋ฅผ ๋ง๋ค์์ผ๋, Commenet ๊ธฐ๋ฅ์ ๊ฐ๋ฐํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค ๐
์ถ์ฒ
728x90
728x90
'Backend > RubyOnRails' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[RubyOnRails Guides] Active Record Basics (0) | 2021.02.17 |
---|---|
RubyOnRails Getting Start(Blog ๋ง๋ค๊ธฐ) 4ํธ(๋ง์ง๋ง๐จโ๐จ) (0) | 2021.02.16 |
RubyOnRails Getting Start(Blog ๋ง๋ค๊ธฐ) 3ํธ (0) | 2021.02.16 |
RubyOnRails Getting Start(Blog ๋ง๋ค๊ธฐ) 1ํธ (0) | 2021.02.16 |
[RubyOnRails] rails new File & Folder (0) | 2021.02.16 |