728x90
RubyOnRails Getting Start(Blog ๋ง๋ค๊ธฐ) 1ํธ
๐ผ ์๋ก
- RubyOnRails Getting Started ์ ์๋ ๊ฐ๋จํ ๊ฒ์ํ CURD ๋ฐ ๋๊ธ ๊ธฐ๋ฅ๊น์ง ๊ฐ๋ฐํ ๋ด์ฉ์ ๋๋ค
- Ruby version์ 2.6.3์ ์ฌ์ฉํฉ๋๋ค.
- Ruby On Rails version์ 5.2.1์ ์ฌ์ฉํฉ๋๋ค.
๐ ํ๋ก์ ํธ ์์ฑ
- RubyMine์ ์ด์ฉํด
File -> new -> Project... -> Application
๋ฅผ ์ด์ฉํด ์์ฑํ ์ ์์ต๋๋ค. - ๋ํ CLI์ ์ด์ฉํด
rails new ํ๋ก์ ํธ๋ช
์ ํตํด ์๋ช ํ ์ ์์ต๋๋ค. - ์ ๋ ํ๋ก์ ํธ ๋ช ์ blog๋ผ๊ณ ์ค์ ํ์ต๋๋ค.
๐ default Fild & Folder ๊ตฌ์กฐ
[RubyOnRails] rails new File & Folder
๐ฌ webServer Start
- binํด๋์ rails๊ฐ ์๊ณ rails์๋ ์คํํ ์ ์๋๋ก ์ค์ ์ด ์ด๋ฏธ ๋์ด ์์ต๋๋ค.
- ์๋์ ๋ช ๋ น์ด๋ฅผ ์ด์ฉํ๋ฉด ์ฝ๊ฒ webServer๋ฅผ ์คํํ ์ ์์ต๋๋ค.
bin/rails server
- dafult port๋ 3000์ ์ฌ์ฉํฉ๋๋ค.
- ์๋ ์ฃผ์๋ก ์ ์ํ๋ฉด ์๋์ ๊ฐ์ ํ๋ฉด์ด ๋์ค๊ฒ ๋ ๊ฒ ์ ๋๋ค.
http://localhost:3000
- ๋ง์ ์ฌ๋๋ค๊ณผ ์ฌ์ง์ด ๊ณ ์์ด๊น์ง ์ฌ๋ฌ๋ถ๋ค์ด ๋ ์ผ์ฆ๋ฅผ ์ฌ์ฉํ๋๊ฒ์ ๋ฐ๊ธฐ๊ณ ์์ต๋๋ค ๐
ctrl + c
๋ฅผ ํตํด ์ฝ๊ฒ ์๋ฒ๋ฅผ ์ค์งํ ์ ์์ผ๋ฉฐ, ๊ฐ์ฅ ํฐ ์ฅ์ ์ค ํ๋๋ ์๋ฒ๊ฐ ๊ตฌ๋ ์ค์๋ ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์๋์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ์ ๋ฐ์ดํธ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ ์์๋ ์ค์งํ ํ์๊ฐ ๋ง์ด ์์ง ์๋ค๋ ์ ์ ๋๋ค.
๐ Hello, Rails
- ์๋ก์ด ์ธ์ด ๋ฐ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ฉด Hello, World๋ฅผ ๋จผ์ ๋์ด ๋ด์ผ ๊ฒ ์ฃ !?
- rails์ ๋ ์ฅ์ ์ค ํ๋๋
generate(g)
๋ก controller์ view๋ฅผ ๋ง๋ค์ด ์ค๋๋ค. - ์๋์ ๊ฐ์ด ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด Welcome์ด๋ผ๋ ์ปจํธ๋กค๋ฌ์ index์ ๋ทฐ๋ฅผ ์์ฑํด์ฃผ๋ฉฐ, ๊ฒฝ๋ก๋ฅผ ์ค์ ํด์ค๋๋ค.
bin/rails generate controller Welcome index
- welcome_controller.rb
class WelcomeController < ApplicationController
def index
end
end
- view(index.html.erb)์ ์๋์ ๊ฐ์ด ๋ด์ฉ์ ์์ฑํฉ๋๋ค.
<h1>Hello, Rails!</h1>
โ Root ์ค์
Root(/)
์ ์ ์ํ๋ฉด ๋ฐฉ๊ธ ์์ฑํ Hello, Rails๊ฐ ํ๋ฉด์ ๋ณด์ด๋๋ก ์ค์ ํ๋ ค๊ณ ํ๋ค.- ์ด๋ ์ฌ์ฉํ๋ ํ์ผ์
config/routes.rb
์ ๋๋ค.
Rails.application.routes.draw do
get 'welcome/index'
root 'welcome/index'
end
- ์ด๋ ๊ฒ ํ๋ฉด
Hello, Rails!
ํ๋ฉด์ด ๋์ค๊ฒ ๋ ๊ฒ๋๋ค.
๐ฐ resource ์ค์
- Rails๋ resources๋ฅผ ์ค์ ํด ํ์ค REST API๋ฅผ ๊ตฌ์ฑํด์ค๋๋ค.
config/routes.rb
์ ์๋์ ๊ฐ์ด ์ถ๊ฐํ ํ routes ๋ชฉ๋ก์ ๋ณด๋ฉด REST API๊ฐ ๋ง๋ค์ด์ง ๊ฑธ ํ์ธํ ์ ์์ต๋๋ค.
Rails.application.routes.draw do
get 'welcome/index'
resources :articles
root 'welcome#index'
end
bin/rails routes
์คํ
Prefix Verb URI Pattern Controller#Action
welcome_index GET /welcome/index(.:format) welcome#index
articles GET /articles(.:format) articles#index
POST /articles(.:format) articles#create
article GET /articles/:id(.:format) articles#show
PATCH /articles/:id(.:format) articles#update
PUT /articles/:id(.:format) articles#update
DELETE /articles/:id(.:format) articles#destroy
root GET / welcome#index
๐ฐ Article Create ๋ง๋ค๊ธฐ
- ์ผ๋จ Article Contoller๋ฅผ ํ๋ฒ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
bin/rails g controller Articles
- articles_controller.rb
class ArticlesController < ApplicationController
end
- ์๋์ ๊ฐ์ด new๋ผ๋ ํจ์๋ฅผ ์ ์ํ๊ณ
/articles/new
๋ก ์ ์ํ๋ฉด ์๋์ ๊ฐ์ ์๋ฌ๋ฉ์์ง๊ฐ ๋์ค๊ฒ ๋ฉ๋๋ค.
class ArticlesController < ApplicationController
def new
end
end
- ๊ฐ๋จํ๊ฒ ์ค๋ช ํ์๋ฉด new ๋ผ๋ view๋ฅผ ๊ฐ์ง๊ฒ์ผ๋ก ์์ํ์ง๋ง, new ๋ผ๋ view๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ๊ทธ๋ ๋ค๋ฉด ๊ฐ๋จํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋น์ฐํ view๋ฅผ ๋ง๋ค์ด ์ฃผ๋ ๊ฒ์ด์ฃ
- views/articles/new.html.erb
<h1>New Article</h1>
Form
- form์ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
views/articles/new.html.erb
์ ์๋์ ๊ฐ์ด form์ ์ถ๊ฐํด์ค๋๋ค.
<%= form_with scope: :article, 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 %>
- rails๋ form_with์ผ๋ก ํผ์ ๋ง๋ค์ ์์ต๋๋ค. ์ด๋ scope๋ก ๋ฌด์์ ์๋ฏธํ๋ form์ธ์ง ์๋ ค์ฃผ๋ฉฐ text_filed, text_area์๊ฒ ์ด๋ค ํ๋๋ฅผ ์ ์ฅํ ์ง ์๋ ค์ฃผ๋ฉด ๋ฉ๋๋ค.
- ๋ค๋ฅธ url๋ก ์ค์ ํ๋ ค๊ณ ํ ๋
url
๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด ๋ฉ๋๋ค.
<%= form_with scope: :article, url: articles_path, local: true do |form| %>
- ๊ธฐ๋ณธ์ ์ผ๋ก rails๋ form action์ REST API์ POST๋ฅผ ์ค์ ํด์ฃผ๊ฒ ๋ฉ๋๋ค.
- ๋ฐ๋ผ์ ๋ฒํผ์ ๋๋ฅด๋ฉด create๊ฐ ์๋ค๊ณ ๋์ค๊ฒ ๋๋๋ฐ, ์ด๊ฒ์ ์์์๋ ๋ดค๋ routes์์๋ ๋ณด๋ฉด create๋ฅผ ์๋ฏธํ๋ POST๋ฅผ ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค. ์ด๋ ์ฐ๋ฆฌ๋ ์์ง create๋ฅผ ์ ์ํด์ฃผ์ง ์์์ต๋๋ค.
Prefix Verb URI Pattern Controller#Action
articles GET /articles(.:format) articles#index
POST /articles(.:format) articles#create
๊ฒ์๊ธ ์์ฑ create ํจ์
articles_controller.rb
์๊ฒ ์๋์ ๊ฐ์ด create ํจ์๋ฅผ ์ ์ํด์ค๋ค.
class ArticlesController < ApplicationController
def new
end
def create
render plain: params[:article].inspect
end
end
- ํผ์ ์ ์ถํ๋ฉด ์๋์ ๊ฐ์ด ๋์ค๊ฒ ๋ ๊ฒ์ ๋๋ค.
<ActionController::Parameters {"title"=>"1234", "text"=>"1234"} permitted: false>
- ํผ์์ ์ ๋ ฅํ article์ ์ ์ฒด param์ ๋ง์ ์ฌ ์ ์์ผ๋ฉฐ, inspect๋ ๋๋ฒ๊น ์ฉ์ผ๋ก ํด๋์ค ์ด๋ฆ, ์ธ์คํด์ค์ object id ๋ฑ์ ์๋ ค์ฃผ๋ ํจ์์ ๋๋ค.
๐จโ๐จ ๋ชจ๋ธ ์์ฑ
- Rails์ ๋ชจ๋ธ์ ๋จ์๋ฅผ ์ฌ์ฉํ๋ฉฐ DB ํ ์ด๋ธ์ ๋ณต์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์๋์ ๋ช ๋ น์ด๋ก ์ฝ๊ฒ model์ ์์ฑํ ์ ์์ต๋๋ค.
$ bin/rails generate model Article title:string text:text
- ์๋์ ๊ฐ์ด model์ db migrate๊ฐ ์์ฑ๋ฉ๋๋ค.
- migrate ํ์ผ๋ช
์
YYYYMMDDHHMMSS_create_๋ชจ๋ธ๋ช .rb
์ ๋๋ค.
class Article < ApplicationRecord
end
class CreateArticles < ActiveRecord::Migration[5.2]
def change
create_table :articles do |t|
t.string :title
t.text :text
t.timestamps
end
end
end
- ๋ฃจ๋น๋ ์์ migrate ํ์ผ๋ก ์ฝ๊ฒ DB ํ ์ด๋ธ์ ๋ง๋ค๊ณ ์์ ํ ์ ์์ต๋๋ค. ์๋์ ๋ช ๋ น์ด๋ก ๋ง์ด๊ทธ๋ ์ด์ ์ ์คํํด๋ด ์๋ค.
$ bin/rails db:migrate
== CreateArticles: migrating ==================================================
-- create_table(:articles)
-> 0.0019s
== CreateArticles: migrated (0.0020s) =========================================
๐ article create DB ์ ์ฅ
articles_controller.rb
class ArticlesController < ApplicationController
def create
@article = Article.new(params[:article])
@article.save
redirect_to @article
end
end
- :article param์ ์ด์ฉํด์ Article ๋ชจ๋ธ์ ๋ง๋ค๊ณ save ํจ์๋ก DB๋ก ์ ์ฅ
- ๊ทธ๋ฌ๋ ์คํํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
- Rails๋ ๋ช๊ฐ์ง ๋ณด์์ฌํญ์ ์ ์ฉํด๋จ๋๋ฐ, ์ง๊ธ ๋ฌธ์ ๋ strong paramters๋ผ๋ ๋ฌธ์ ๋ก ์ ํํ ๋งค๊ฐ๋ณ์๋ฅผ ์๋ ค์ค์ผ ํ๋ค๋ ์๋ฏธ์ ๋๋ค.
- ๋ฐ๋ผ์ ์๋์ ๊ฐ์ด ๊ฐ ํ๋ผ๋ฏธํฐ๋ค์ ๋ชจ๋ ์๋ ค์ค์ผ ํฉ๋๋ค.
@article = Article.new(params.require(:article).permit(:title, :text))
- ์์ ์ฝ๋๋ ๋ณด์์ ์ผ๋ก ๋ฌธ์ ๊ฐ ๋ ์๋ ์๊ธฐ ๋๋ฌธ์ ์ธ๋ถ์์ ํธ์ถ๋ ์ ์๋๋ก private์ผ๋ก ๋ง๋ค๊ธฐ๋ ํฉ๋๋ค.
class ArticlesController < ApplicationController
def create
@article = Article.new(article_params)
@article.save
redirect_to @article
end
private
def article_params
params.require(:article).permit(:title, :text)
end
end
- ์ดํ์ ์์์ ์ ์ถํ๋ฉด
show
Action์ ์ฐพ์ง ๋ชปํ๋ค๊ณ ํ๋ค. - ๊ทธ๋ ๋ค๋ฉด ์ด์ show Action์ ์ ์ํด๋ณด์.
๐ซ Article Show
articles_controller.rb
class ArticlesController < ApplicationController
def show
@article = Article.find(params[:id])
end
end
find๋ฅผ ์ด์ฉํด id๋ฅผ ๊ฐ์ ธ์ค๋ฉด ์ฝ๊ฒ ๋ชจ๋ธ์ ์ฐพ์์ ์๋๊ฑธ ํ์ธํ ์ ์์ต๋๋ค.
show view๋ฅผ ์ ์ํด๋ด ์๋ค.
show.html.erb
<p>
<strong>Title:</strong>
<%= @article.title %>
</p>
<p>
<strong>Text:</strong>
<%= @article.text %>
</p>
- ํผ์ ์ ์ถํ๋ฉด ์๋์ ๊ฐ์ด ๊ฒฐ๊ณผ๊ฐ ๋์ค๋๊ฑธ ํ์ธํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
- RubyOnRails๋ ๊ธฐ๋ณธ์ ์ผ๋ก REST API๋ค์ ๋ชจ๋ธ์ ์์ฑํ๋ฉด ์์ฑํด ์ฃผ๊ธฐ ๋๋ฌธ์ ๋น์ฆ๋์ค ๋ก์ง์ ํจ์ฌ ๋ ์ง์ค ํ ์ ์์ต๋๋ค.
- ๋ํ ORM ๊ธฐ๋ฅ์ผ๋ก DB ์ฟผ๋ฆฌ๋ ๊ฐ๋จํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
- ๊ฐ์ธ์ ์ผ๋ก ์ฒ์ ์ฌ์ฉํด๋ณด๋ฉด์ ์๋ฌ ๋ฉ์์ง๊ฐ ๋ฐ๋ก ๋์จ๋ค๋ ์ ๊ณผ ์๋ฌ๋ฉ์์ง๋ฅผ ๋ฐ๋ผ ๊ฐ๊ธฐ๋ง ํ๋ฉด ๋๋ค๋ ๊ฒ๊ณผ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ์๋ฒ๋ฅผ ๋ด๋ ธ๋ค ์ฌ๋ฆฌ์ง ์์๋ ๋ณ๊ฒฝ์ฌํญ์ด ์ ์ฉ๋๋ ์ ๋ ๊ฐ๋ฐ ์๊ฐ์ ๋จ์ถํด์ฃผ๋ ๊ฒ ๊ฐ์ต๋๋ค.
- ๋ง์ง๋ง์ผ๋ก controller Action๊ณผ view์ ๋งคํ์ด ํด๋ ๋ฐ ํ์ผ๋ช ์ผ๋ก ๋๋, ๊ธฐ๋ณธ ๋ผ์ฐํ ์ค์ ๋ค์ด ๊ฐ๋จํ๋ ๊ฑธ ๋๋ผ๊ฒ ๋์์ต๋๋ค.
- 2ํธ์์๋ ๋ชจ๋ Article์ ์กฐํํ๊ณ ์์ ํ๊ณ ์ญ์ ํ๊ณ ๊ฒ์ฆํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ถ์ฒ
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 ๋ง๋ค๊ธฐ) 2ํธ (0) | 2021.02.16 |
[RubyOnRails] rails new File & Folder (0) | 2021.02.16 |