Controller
Strong Parameter
:๋๋ ํ ๋น ์ทจ์ฝ์ฑ์ ๋ํ ํ์ดํธ ๋ฆฌ์คํธ ๋์ฑ ๋ฐฉ๋ฒ์ด๋ค.
๋๋ ํ ๋น ์ทจ์ฝ์ฑ : ์ ์์ ์ธ ์ฌ์ฉ์๊ฐ ์์ ์ ๊ณ์ ์ ๊ด๋ฆฌ์ ๊ถํ์ ๋ถ์ฌํด ์์คํ ์ ์กฐ์ํ ์ํ์ด ์์.
params.require(model).permit(attr, ...)
# model:๋ชจ๋ธ์ด๋ฆ
# attr : ์ถ์ถ์ ํ๊ฐํ ํ๋ ์ด๋ฆ.
require
๋ฉ์๋๋ ์ง์ ๋ ๋ชจ๋ธ์ ํค๊ฐ ์กด์ฌํ๋์ง ํ์ธ ํ ์กด์ฌํ๋ฉด ํด๋น ๊ฐ๋ค์ ๋ฆฌํดํ๊ณ , ์กด์ฌํ์ง ์์ผ๋ฉดActionController::ParameterMissing
์์ธ๊ฐ ๋ฐ์ํ๋ค.permit
๋ฉ์๋๋ ๋ชจ๋ธ์ ์ผ๊ด์ ์ผ๋ก ์ถ๊ฐํ ์์ฑ๋ค์ ํ๊ฐํ๋ ๋ฉ์๋์ด๋ค. ๋ฆฌํด๊ฐ์ผ๋ก ์ง์ ๋ ํค๋ง ํฌํจํ๋ ํด์๋ฅผ ๋ฆฌํดํ๋ค.
#scaffolding
def create
@book=Book.new(book_params)
end
private
def book_params
params.require(:book).permit(:isbn,:title,:price)
end
์ด๋ ๊ฒ Strong Parameters๋ ํ๊บผ๋ฒ์ ์ ๋ ฅํ ์ ์๋ ์์ฑ๋ค์ ํํฐ๋งํ๋ฏ๋ก ์ ์์ ์ธ ์ฌ์ฉ์๊ฐ ๊ฐ์ ์์๋ก ๋ฃ๋ ๊ฒ์ ๋ฏธ์ฐ์ ๋ฐฉ์ง ํ ์ ์๋ค.
Filter
: ์ก์ ๋ฉ์๋๊ฐ ์คํ๋๊ธฐ ์ด์ ๊ณผ ์ดํ์ ๋ถ๊ฐ ์ฒ๋ฆฌ๋ฅผ ์ํด์ ์ฌ์ฉํ๋ค. ์ปจํธ๋กค๋ฌ ์ ์ฒด์ ์ ์ฉ๋๋ค.
before & after filter(์ ,ํ ์ฒ๋ฆฌ)
before_action :method[, ...]
after_action :method[, ...]
around filter(์ ํ์ฒ๋ฆฌ ํ๋ฒ์)
around_action :method[, ...]
# example
around_action :around_logger
def index
sleep3
render text: 'index ์ก์
์คํ'
end
private
def around_logger
logger.debug('[Start1]'+Time.now.to_s)
yield #์ก์
์ ์คํ
logger.debug('[Finish1]'+Time.now.to_s)
end
end
filter ์ ์ฉ ๋ฒ์ ์ง์
: ํํฐ๋ ํด๋น ์ปจํธ๋กค๋ฌ + ํ์๋ ์ปจํธ๋กค๋ฌ๋ ์ ์ฉ๋๋ค.
only์ except ์ต์
( ํํฐ ์ ์ฉ๋ฒ์ ์ ํ)
# example
before_action :start_logger, only: [:index, index2]
after_action :end_logger, except :index
only
๋ ์ง์ ํ ์ก์
์๋ง ํํฐ๋ฅผ ์ ์ฉ, except
์ต์
์ ์ง์ ๋ ์ก์
์ ํํฐ ์ ์ฉ์ ์ ์ธ.
์ด ์ต์ ๋ค์ ์ต๋ํ ์ ๊ฒ ์ฌ์ฉํ ๊ฒ์ ๊ถ์ฅํ๋ค. ๋ง์ด ์ฌ์ฉํ๊ฒ๋๋ฉด ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๊ณ ๋๋ฒ๊ทธํ ๋๋ ๋ฌธ์ ๋ฅผ ์ฐพ๊ธฐ ํ๋ค์ด์ง๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ปจํธ๋กค๋ฌ ๋ชจ๋ ์ก์ ์ ๊ณตํต์ ์ผ๋ก ์ ์ฉํ ์ ์๋ ๋ถ๋ถ์ ์ต๋ํ ํํฐ๋ก ์ ์ฉํ๊ณ , ๋ค๋ฅธ ๋ถ๋ถ์ ๊ฒํ ํด๋ผ.
skip_xxxxx_action (์์ํ ํํฐ๋ฅผ ์ ์ธ)
# before, after, around๋ก ์ ์ฉ๋ ๋ชจ๋ ํํฐ์ ๊ฑฐ
skip_action_callback :my_logging
# ํน์ ํ ํํฐ์ ๊ฑฐ xxxxx๋ถ๋ถ์ before,after,around์คํ๋!
skip_before_action :my_logging
Resource
: CRUD ํ ์ ์๋ ์ ๋ณด๋ผ๊ณ ์๊ฐํ๋ฉด ์ข๋ค.
#routes.rb
resources :name [, ...]
resource :name [, ...]
resources
๋ ์ฌ๋ฌ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ๊ด๋ฆฌํ๋ RESTful ์ธํฐํ์ด์ค ์์ฑ, resource
๋ ํ๋์ ๋ฆฌ์์ค๋ฅผ ๊ด๋ฆฌํ๋ interface์์ฑ! ์ด๋ ์ฐจ์ด์ ์ resource
๋ index์ก์
์ด ์ ์๋์ง ์์์ผ๋ฏ๋ก, show,edit,delete์์ :id๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ์ง ์๋๋ค.
1. constraints(๋ผ์ฐํธ ๋งค๊ฐ๋ณ์ ์ ์ฝ์กฐ๊ฑด)
:id
์ ๋ผ์ฐํธ ๋งค๊ฐ๋ณ์๊ฐ ํฌํจ์ด ๋์ด์์๋ ๋ชจ๋ ๊ฐ์ ์ ๋ฌํ ์ ์์ง๋ง, ์ด๋ค ๊ฐ์ด ์ ๋ฌ๋ ์ง๋ฅผ ๋ฏธ๋ฆฌ ์๊ณ ์๋ค๋ฉด ์ด๋์ ๋ ์ ํ์ ๊ฑธ์ด๋๋ ๊ฒ์ด ์ข๋ค.
# {<๋งค๊ฐ๋ณ์์ด๋ฆ> : <์ ๊ทํํ์>}
resources :books, constraints: {id: /[0-9]{1,2}/}
2. ์ ์ฝ ํด๋์ค ์ ์(๋ณต์กํ ์ ์ฝ์กฐ๊ฑด)
: ์ ๊ท ํํ์๋ง์ผ๋ก ํํํ ์ ์๋ ๋ณต์กํ ์ ์ฝ ์กฐ๊ฑด์ ์ค์ ํ๊ณ ์ถ๋ค๋ฉด ์ ์ฝ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ค.
#TimeConstraint.rb
class TimeConstraint
def matches?(request)
current = Time.now
current.hour >= 9 && current.hour < 18
end
end
matches?
๋ฉ์๋๋ฅผ ๋ง๋ค์ด์ฃผ๋ฉด๋๋ค. ์ด๋ ๋๊ฐ์ง ๊ท์น์ ์ง์ผ์ผํ๋ค.
๋งค๊ฐ๋ณ์๋ก ์์ฒญ์ ๋ณด(request ๊ฐ์ฒด)๋ฅผ ๋ฐ์
๋ฆฌํด ๊ฐ์ผ๋ก๋ ๋ผ์ฐํธ๋ฅผ ์ ํจํ ํ ์ง์ ๋ํ true or false ๋ฆฌํด
require 'TimeConstraint'
Railbook::Application.routes.draw do
resources :books, constraint: TimeConstraint.new
end
3. format(form ๋งค๊ฐ๋ณ์์ ๊ฑฐ)
resources :books,format: false
URLํจํด์์ format์ด ์ ๊ฑฐ๋ ๋ผ์ฐํธ๊ฐ ์์ฑ๋๋ค.
4. controller & as(์ปจํธ๋กค๋ฌ ํด๋์ค,url ํฌํผ ์ด๋ฆ์์ )
resources :users, controller: :members
# UsersController๋ฅผ MembersController์ ๋งคํ
resources :reviews, as: :comments
# reviews_path๋ฅผ comments_path์ ์ด๋ฆ์ผ๋ก ํฌํผ ์์ฑ
5. namespace & scope (๋ชจ๋ ๋ด๋ถ ์ปจํธ๋กค๋ฌ ๋งตํ)
: ์ปจํธ๋กค๋ฌ๋ฅผ ํด๋๋ก ์ ๋ฆฌํ๊ณ ์ถ์ ๊ฒฝ์ฐ > rails generate controller Admin::Books
๋ฅผ ํ๋ฉด controllers/adminํด๋ ์๋์ books_controller๊ฐ ์์ฑ๋๋ค. ์ด๋ RESTful์ ์ ์ํ๋ ค๋ฉด
namespace :admin do
resources :books
end
# ๋ชจ๋์ ์ธ์๋ง ํ๊ณ urlํจํด๊ณผ ํฌํผ์ ์ํฅ์ ์ฃผ๊ณ ์ถ์ง ์์๊ฒฝ์ฐ
scope module: :admin do
resources :books
end
6. collection & member(RESTful ์ธํฐํ์ด์ค์ ์ก์
์ถ๊ฐ)
resources :name do
[collection do
method Application
...
end]
[member do
method Application
...
end]
end
# name : ๋ฆฌ์์ค ์ด๋ฆ
# method : ์ ์ฉํ HTTP ๋ฉ์๋(get, post, put, patch, delete)
# action : ์ ์ฉํ ์ก์
7. only & except
: ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฑ๋๋ ์ก์ ์ ์ผ๋ถ๋ฅผ ๋ฌดํจํ ์ํค๊ณ ์ถ์ใธ!
resources :users, except: [:show, :destroy]
resources :users, only: [:index, :create, :new, :update, :edit]
8. resources ์ค์ฒฉ
: ์ ํ๋ฆฌ์ผ์ด์ ๋ด๋ถ์์ ๊ณ์ธต ๊ด๊ณ๋ฅผ ๊ฐ๋ ๊ฒฝ์ฐ
resources :books do
resources :reviews
end
resources :books do
resources :reviews , shallow: true
end
shallow
๋ :id
๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ์ง ์๋ ์ก์
์ :book_id ๋งค๊ฐ๋ณ์๊ฐ ๋ถ๋๋ค.
Last updated
Was this helpful?