Scaffolding

scaffoldingμ΄λž€ '기반'μ΄λΌλŠ” 의미둜, κΈ°λ³Έ κΈ°λŠ₯을 미리 κ΅¬ν˜„ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 골격(기반)을 μƒμ„±ν•˜κΈ° μœ„ν•œ κΈ°λŠ₯

1. rails project 생성

rails new learn_project

2. scaffold 생성

rails g scaffold name field:type [βˆ™βˆ™βˆ™] [options] 
#name : λͺ¨λΈμ΄λ¦„
#field : ν•„λ“œ 이름
#type : μžλ£Œν˜•
#options :λ™μž‘μ˜΅μ…˜
invoke  active_record
create    db/migrate/20170123090643_create_posts.rb
create    app/models/post.rb
invoke    test_unit
create      test/models/post_test.rb
create      test/fixtures/posts.yml
invoke  resource_route
route    resources :posts
invoke  scaffold_controller
create    app/controllers/posts_controller.rb
invoke    erb
create      app/views/posts
create      app/views/posts/index.html.erb
create      app/views/posts/edit.html.erb
create      app/views/posts/show.html.erb
create      app/views/posts/new.html.erb
create      app/views/posts/_form.html.erb
invoke    test_unit
create      test/controllers/posts_controller_test.rb
invoke    helper
create      app/helpers/posts_helper.rb
invoke      test_unit
invoke    jbuilder
create      app/views/posts/index.json.jbuilder
create      app/views/posts/show.json.jbuilder
create      app/views/posts/_post.json.jbuilder
invoke  assets
invoke    coffee
create      app/assets/javascripts/posts.coffee
invoke    scss
create      app/assets/stylesheets/posts.scss
invoke  scss
create    app/assets/stylesheets/scaffolds.scss

scaffoldλͺ…λ Ήμ–΄λ₯Ό ν†΅ν•΄μ„œ μžλ™μœΌλ‘œ μƒμ„±λœ νŒŒμΌλ“€ 이닀. 이 쀑에 posts_controller.rb , route, 각쒅 viewνŒŒμΌλ“€μ„ μ‚΄νŽ΄ λ³Ό 것이닀.

RESTful

1. HTTPλž€ 무엇인가?

  • HTTPλž€ HyperText Transport Protocol의 μ•½μžλ‘œ μ›Ήμ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈκ°„μ˜ λ¬Έμ„œλ₯Ό κ΅ν™˜ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” ν”„λ‘œν† μ½œμ΄λ‹€.

  • World Wide Web( WWW )의 λΆ„μ‚°λ˜μ–΄ μžˆλŠ” Server와 Client 간에 Hypertextλ₯Ό μ΄μš©ν•œ μ •λ³΄κ΅ν™˜μ΄ κ°€λŠ₯ν•˜λ„λ‘ ν•˜λŠ” 톡신 κ·œμ•½μ΄λ‹€.

    ν•˜μ΄νΌν…μŠ€νŠΈλŠ” λ¬Έμ„œ 쀑간쀑간에 νŠΉμ • ν‚€μ›Œλ“œλ₯Ό 두고 λ¬Έμžλ‚˜ 그림을 μƒν˜Έ 유기적으둜 κ²°ν•©ν•˜μ—¬ μ—°κ²°μ‹œν‚΄μœΌλ‘œμ¨, μ„œλ‘œ λ‹€λ₯Έ λ¬Έμ„œλΌ 할지라도 ν•˜λ‚˜μ˜ λ¬Έμ„œμΈ κ²ƒμ²˜λŸΌ λ³΄μ΄λ©΄μ„œ μ°Έμ‘°ν•˜κΈ° 쉽도둝 ν•˜λŠ” 방식을 μ˜λ―Έν•œλ‹€.

    인터넷 μ£Όμ†Œλ₯Ό μ§€μ •ν•  λ•Œ 'http://www....' 와 같이 ν•˜λŠ” 것은 www둜 μ‹œμž‘λ˜λŠ” 인터넷 μ£Όμ†Œμ—μ„œ ν•˜μ΄νΌν…μŠ€νŠΈ λ¬Έμ„œμ˜ κ΅ν™˜μ„ http ν†΅μ‹ κ·œμ•½μœΌλ‘œ μ²˜λ¦¬ν•˜λΌλŠ” λœ»μ΄λ‹€.

  • http의 첫번째 버전은 인터넷을 ν†΅ν•˜μ—¬ κ°€κ³΅λ˜μ§€ μ•Šμ€ 데이터λ₯Ό μ „μ†‘ν•˜κΈ° μœ„ν•œ λ‹¨μˆœν•œ ν”„λ‘œν† μ½œμ΄μ—ˆμœΌλ‚˜, 데이터에 λŒ€ν•œ 전솑과 μš”κ΅¬Β·μ‘λ‹΅μ— λŒ€ν•œ μˆ˜μ • λ“± κ°€κ³΅λœ 정보λ₯Ό ν¬ν•¨ν•˜λŠ” ν”„λ‘œν† μ½œλ‘œ κ°œμ„ λ˜μ—ˆλ‹€.

2. HTTP methodμ—λŠ” 어떀것이 있고 μ™œ μžˆλŠ”κ°€?

GET

  1. URL에 ν•΄λ‹Ήν•˜λŠ” 자료의 전솑을 μš”μ²­ν•œλ‹€.

  2. 데이터가 URL에 λ…ΈμΆœλœλ‹€.

  3. 인코딩/λ””μ½”λ”©μ˜ 과정이 μ—†κΈ° λ•Œλ¬Έμ— POST보닀 λΉ λ₯΄λ‹€.

  4. URL의 길이 μ œμ•½μœΌλ‘œ 인해 λ§Žμ€ 데이터 전솑은 무리이닀.

POST

  1. μ„œλ²„κ°€ μ²˜λ¦¬ν•  수 μžˆλŠ” 자료λ₯Ό 보낸닀.

  2. λ°μ΄ν„°λŠ” HTTP Boby에 μˆ¨κ²¨μ„œ μ„œλ²„λ‘œ μ „μ†‘ν•œλ‹€.

  3. GET으둜 λ³΄λ‚Όμˆ˜ μ—†λŠ” 자료λ₯Ό μ „μ†‘ν• λ•Œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.

HEAD

  1. GETκ³Ό 같은 μš”μ²­μ΄μ§€λ§Œ, μ›Ή μ„œλ²„μ—μ„œ 헀더 정보 μ΄μ™Έμ—λŠ” μ–΄λ–€ 데이터도 보내지 μ•ŠλŠ”λ‹€.

  2. μ›Ή μ„œλ²„μ˜ λ‹€μš΄ μ—¬λΆ€ 점검(Health Check)μ΄λ‚˜ μ›Ή μ„œλ²„ 정보(버전 λ“±)등을 μ–»κΈ° μœ„ν•΄ μ‚¬μš©λ  수 μžˆλ‹€.

OPTIONS

  1. μ„œλ²„κ°€ νŠΉμ • URL에 λŒ€ν•΄ μ–΄λ– ν•œ HTTP Methodλ₯Ό μ§€μ›ν•˜λŠ”μ§€ λ¬»λŠ”λ‹€.

PUT

  1. ν•΄λ‹Ή URL에 자료λ₯Ό μ €μž₯ν•œλ‹€.(POST와 μœ μ‚¬ν•œ 전솑 ꡬ쑰λ₯Ό κ°€μ§€κΈ° λ•Œλ¬Έμ— 헀더 이외에 λ©”μ‹œμ§€(데이터)κ°€ ν•¨κ»˜ μ „μ†‘λœλ‹€.)

  2. 원격지 μ„œλ²„μ— μ§€μ •ν•œ μ½˜ν…μΈ λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λ©° ν™ˆνŽ˜μ΄μ§€ 변쑰에 많이 μ•…μš©λ˜κ³  μžˆλ‹€.

DELETE

  1. ν•΄λ‹Ή URL의 자료λ₯Ό μ‚­μ œν•œλ‹€.

TRACE

  1. 이전에 μš”μ²­ν•œ λ‚΄μš©μ„ 듀을 것을 μš”μ²­ν•œλ‹€.

  2. 원격지 μ„œλ²„μ— Loopback(루프백) λ©”μ‹œμ§€λ₯Ό ν˜ΈμΆœν•˜κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€.

CONNECT

  1. ν”„λ‘μ‹œκ°€ μ‚¬μš©ν•˜λŠ” μš”μ²­.

PATCH

  1. λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ 뢀뢄적인 μˆ˜μ •μ„ μ μš©ν•œλ‹€.

3. RESTful μ΄λž€ 무엇인가.

REpresentational State Transfer의 μ•½μžλ‘œ μž₯λΉ„κ°„ 톡신을 μœ„ν•΄ CORBA, RPC, SOAPλ“±μ˜ λ³΅μž‘ν•œ 방법을 μ‚¬μš©ν•˜λŠ” λŒ€μ‹ , κ°„λ‹¨ν•˜κ²Œ HTTPλ₯Ό μ΄μš©ν•˜λŠ” 것이 λͺ©μ μ΄λ‹€.

HTTP URIλ₯Ό 톡해 Resourceλ₯Ό λͺ…μ‹œν•˜κ³ , HTTP Method(Post, Get, Put, Delete)λ₯Ό 톡해 ν•΄λ‹Ή Resource에 λŒ€ν•œ CRUD Operation을 μ μš©ν•œλ‹€. 즉, RESTλŠ” ROA(Resource Oriented Architecture) μ„€κ³„μ˜ 쀑심에 Resourceκ°€ 있고 HTTP Methodλ₯Ό 톡해 Resourceλ₯Ό μ²˜λ¦¬ν•˜λ„λ‘ μ„€κ³„λœ 아킀텍쳐λ₯Ό μ˜λ―Έν•œλ‹€.

REST의 μž₯점

  • OPENAPIλ₯Ό μ œκ³΅ν•˜κΈ° 쉽닀.

  • λ©€ν‹°ν”Œλž«νΌ 지원 및 연동이 μš©μ΄ν•˜λ‹€.

  • μ›ν•˜λŠ” νƒ€μž…μœΌλ‘œ 데이터λ₯Ό μ£Όκ³ λ°›μ„μˆ˜ μžˆλ”°. (XML, JSON, RSS )

  • κΈ°μ‘΄ μ›Ή 인프라λ₯Ό(HTTP)λ₯Ό κ·ΈλŒ€λ‘œ μ‚¬μš©κ°€λŠ₯ν•˜λ‹€ ( λ°©ν™”λ²½, μž₯λΉ„ μš”κ±΄ λΆˆν•„μš” )

  • μ‚¬μš©ν•˜κΈ° 쉽닀

  • μ„Έμ…˜μ„ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€. 각각의 μš”μ²­μ— 독립적.

REST의 단점

  • ν‘œμ€€μ΄ μ—†μ–΄μ„œ 관리가 μ–΄λ ΅λ‹€.

  • μ‚¬μš©ν•  수 μžˆλŠ” λ©”μ†Œλ“œκ°€ 4κ°€μ§€ 밖에 μ—†λ‹€.

  • λΆ„μ‚°ν™˜κ²½μ—λŠ” λΆ€μ ν•©ν•˜λ‹€.

  • HTTP톡신 λͺ¨λΈμ— λŒ€ν•΄μ„œλ§Œ μ§€μ›ν•œλ‹€.

REST의 νŠΉμ§•

  • ν΄λΌμ΄μ–ΈνŠΈ/μ„œλ²„ ꡬ쑰 : μΌκ΄€μ μœΌλ‘œ λ…λ¦½λ˜μ–΄μ•Ό ν•œλ‹€.

  • λ¬΄μƒνƒœ(Stateless) : κ°μš”μ²­ κ°„ ν΄λΌμ΄μ–ΈνŠΈμ˜ ContextλŠ” μ„œλ²„μ— μ €μž₯λ˜μ–΄μ„œλŠ” μ•ˆ λœλ‹€.

  • μΊμ‹œκ°€λŠ₯(Cacheable) : WWWμ—μ„œμ™€ 같이 ν΄λΌμ΄μ–ΈνŠΈλŠ” 응닡을 Caching ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.

  • 계측화(Layered System) : ν΄λΌμ΄μ–ΈνŠΈλŠ” 보톡 λŒ€μƒ μ„œλ²„μ— 직접 μ—°κ²° λ˜λŠ” 쀑간 μ„œλ²„λ₯Ό 톡해 μ—°κ²°λ˜λŠ”μ§€ λͺ¨λ₯Έλ‹€.

  • Code on demand(option) : μžλ°” μ• ν”Œλ¦Ώ/ μžλ°”μŠ€ν¬λ¦½μ˜ 제곡으둜 μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈκ°€ μ‹€ν–‰ μ‹œν‚¬ 수 μžˆλŠ” λ‘œμ§μ„ μ „μ†‘ν•˜μ—¬, κΈ°λŠ₯을 ν™•μž₯ ν• μˆ˜ μžˆλ‹€.

  • μΈν„°νŽ˜μ΄μŠ€ 일관성 : μ•„ν‚€ν…μ²˜λ₯Ό λ‹¨μˆœν™”ν•˜κ³ , μž‘μ€ λ‹¨μœ„λ‘œ λΆ„λ¦¬ν•˜μ—¬, ν΄λΌμ΄μ–ΈνŠΈ-μ„œλ²„ 파트 λ³„λ‘œ λ…λ¦½μ μœΌλ‘œ κ°œμ„  될 수 μžˆλ„λ‘ ν•œλ‹€.

  • 자체 ν‘œν˜„κ΅¬μ‘°(Self-Descriptiveness) : API λ©”μ‹œμ§€λ§Œ 보고도 μ–΄λ–€ API인지λ₯Ό 이해 ν• μˆ˜ μžˆλŠ” 자체 ν‘œν˜„ ꡬ쑰λ₯Ό κ°€μ§„λ‹€.

4. rake routesκ°€ λ§ν•΄μ£ΌλŠ” 것은?

routes.rb

resources λ©”μ„œλ“œλ‘œ resource의 ν‘œμ€€μ μΈ route(RESTful μΈν„°νŽ˜μ΄μŠ€)κ°€ μ •μ˜ 된 것이닀.

routes μ •μ˜ 확인

  1. rake routes λͺ…λ Ήμ–΄λ‘œ ν˜„μž¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ •μ˜λœ routeλ₯Ό λͺ©λ‘μœΌλ‘œ 확인 ν•  수 μžˆλ‹€.

  2. λΈŒλΌμš°μ €μ—μ„œ http://localhost:3000/rails/info/routes λ‘œλ„ 확인 ν•  수 μžˆλ‹€.

Prefix

Verb

URI Pattern

Controller#Action

μ—­ν• 

posts

GET

/posts(.:format)

posts#index

λͺ©λ‘ ν™”λ©΄ ν‘œμ‹œ

POST

/posts(.:format)

posts#create

μƒˆλ‘œμš΄ 데이터 λ“±λ‘ν™”λ©΄μ˜ μž…λ ₯을 λ°›μ•„ 데이터 등둝 처리

new_post

GET

/posts/new(.:format)

posts#new

μƒˆλ‘œμš΄ 데이터 등둝 ν™”λ©΄ ν‘œμ‹œ

edit_post

GET

/posts/:id/edit(.:format)

posts#edit

μˆ˜μ • ν™”λ©΄ ν‘œμ‹œ

post

GET

/posts/:id(.:format)

posts#show

κ°œλ³„ 상세 ν™”λ©΄ ν‘œμ‹œ

PATCH

/posts/:id(.:format)

posts#update

μˆ˜μ •ν™”λ©΄μ˜ μž…λ ₯을 λ°›μ•„ μˆ˜μ • 처리

PUT

/posts/:id(.:format)

posts#update

DELETE

/posts/:id(.:format)

posts#destroy

λͺ©λ‘ν™”λ©΄μ—μ„œ μ§€μ •λœ 데이터 제거처리

controller와 view파일 μ‚΄νŽ΄λ³΄κΈ°

View Helper

μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œμ˜ 폼(Form)은 μœ μ € μž…λ ₯을 λ°›κΈ° μœ„ν•΄μ„œλŠ” ν•„μˆ˜μΈ μΈν„°νŽ˜μ΄μŠ€μž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ 폼의 각 μš”μ†Œλ“€μ˜ λͺ…λͺ…법과 μˆ˜λ§Žμ€ 속성듀 탓에 폼의 λ§ˆν¬μ—…μ€ μ‰½κ²Œ λ³΅μž‘ν•΄μ§€κ³ , κ΄€λ¦¬ν•˜κΈ° μ–΄λ €μ›Œμ§‘λ‹ˆλ‹€. κ·Έλž˜μ„œ Railsμ—μ„œλŠ” 폼 λ§ˆν¬μ—…μ„ μƒμ„±ν•˜κΈ° μœ„ν•œ λ·° 헬퍼λ₯Ό μ œκ³΅ν•˜κ³ , 이런 λ²ˆμž‘ν•œ μž‘μ—…μ„ ν•  ν•„μš”λ₯Ό μ—†μ•΄μŠ΅λ‹ˆλ‹€.

ν…œν”Œλ¦Ώ νŒŒμΌμ„ μž‘μ„±ν•  λ•Œ 도움을 μ£ΌλŠ” λ©”μ„œλ“œλ₯Ό μ˜λ―Έν•œλ‹€. λ·° 헬퍼λ₯Ό μ΄μš©ν•˜λ©΄ μž…λ ₯ 양식 μš”μ†Œ 생성을 λΉ„λ‘―ν•΄ λ¬Έμžμ—΄ λ˜λŠ” 숫자 μ •ν˜•ν™”, 인코딩 처리 λ“± λ·°μ—μ„œ 자주 μ‚¬μš©λ˜λŠ” 처리λ₯Ό μ†μ‰½κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ λ·° ν—¬νΌμ—λŠ” λͺ¨λΈ λ˜λŠ” λΌμš°ν„°λ₯Ό μ—°λ™ν•˜λŠ” λ“± Rails μžμ²΄μ™€ ν•¨κ»˜ μ΄μš©ν•  수 μžˆλŠ” κΈ°λŠ₯이 λ§Žλ‹€.

1. index μ•‘μ…˜

Post.all은 ν˜„μž¬ λ°μ΄ν„°λ² μ΄μŠ€μ— μžˆλŠ” λͺ¨λ“  κΈ€(posts) 정보λ₯Ό Post λͺ¨λΈλ‘œ λ°˜ν™˜ν•˜λŠ” λ©”μ†Œλ“œ μž…λ‹ˆλ‹€. 이 호좜의 κ²°κ³ΌλŠ” κΈ€(post)의 배열이고 @posts λ³€μˆ˜μ— μ €μž₯λ©λ‹ˆλ‹€.

index λ·°λŠ” @posts 배열을 μˆœν™˜ν•˜λ©΄μ„œ λ‚΄μš©κ³Ό 링크λ₯Ό λ³΄μ—¬μ€λ‹ˆλ‹€.

view helper

  • link_to(body, url [ , html_options])λŠ” μ„ΈλΆ€ ν•­λͺ©μ— λŒ€ν•œ 링크λ₯Ό λ§Œλ“­λ‹ˆλ‹€.

    body : 링크 ν…μŠ€νŠΈ url : 링크 λŒ€μƒ 경둜(or λ§€κ°œλ³€μˆ˜μ •λ³΄) html_options : νƒœκ·Έμ— μ μš©ν•  μ˜΅μ…˜μ •λ³΄

  • 이 λΆ€λΆ„μ—μ„œ postλŠ” eachλ©”μ„œλ“œμ—μ„œ @postsλ³€μˆ˜λ‘œ λΆ€ν„° 얻은 각각의 μš”μ†Œμ΄λ‹€.

  • link_to λ©”μ„œλ“œμ˜ 링크 λŒ€μƒ κ²½λ‘œμ— λͺ¨λΈ 객체λ₯Ό μ μš©ν•˜λ©΄ railsλŠ” 객체λ₯Ό λ‚˜νƒ€λ‚΄λŠ” id속성(post.id)λ₯Ό μ‚¬μš©ν•œλ‹€. λ”°λΌμ„œ "/posts/1"κ³Ό 같은 κ²½λ‘œκ°€ μƒμ„±λœλ‹€.

  • edit_post_path 와 new_post_path λŠ” λ ˆμΌμ¦ˆκ°€ μ œκ³΅ν•˜λŠ” RESTfule λΌμš°νŒ… λΆ€λΆ„μž…λ‹ˆλ‹€. resources λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ μžλ™μœΌλ‘œ μ‚¬μš©λ˜λŠ” λ·° 헬퍼이닀.

  • data-confirmμ˜΅μ…˜μ„ μ§€μ •ν•˜λ©΄ 링크λ₯Ό 클릭할 λ•Œ 확인 λŒ€ν™”μƒμžκ°€ ν‘œμ‹œλœλ‹€.

  • HTTP GETμ΄μ™Έμ˜ κ²ƒμœΌλ‘œ μš”μ²­μ„ ν• λ•Œ method둜 μ§€μ •ν•  수 μžˆλ‹€. method: :deleteλŠ” HTTP DELETE λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€λŠ” 것이닀.

2. Show μ•‘μ…˜

  • before_action method, only: action λŠ” action λ©”μ„œλ“œκ°€ μ‹€ν–‰λ˜κΈ° 전에 μ‹€ν–‰ν•  λ©”μ„œλ“œλ₯Ό μ§€μ •ν•˜λŠ” λ©”μ„œλ“œ μž…λ‹ˆλ‹€.

    method: ν•„ν„°λ‘œ μ‹€ν–‰λ˜λŠ” λ©”μ„œλ“œ action: ν•„ν„°λ₯Ό μ μš©ν•  μ•‘μ…˜ λ©”μ„œλ“œ

    μ—¬κΈ°μ„œλŠ” showμ•‘μ…˜μ΄ μ‹€ν–‰λ˜κΈ° 전에 set_postκ°€ μ‹€ν–‰λ©λ‹ˆλ‹€.

  • privateλŠ” μ•‘μ…˜μœΌλ‘œ ν˜ΈμΆœλ˜μ§€ μ•Šλ„λ‘ ν•΄μ€€λ‹€. κ·Έλž˜μ„œ filter methodμ—μ„œ μ²˜λ¦¬ν•˜λŠ” λ‚΄μš©μ„ private에 μ„ μ–Έλœ 것이닀.

  • urlμ—μ„œ 전달받은 λ§€κ°œλ³€μˆ˜(id)λ₯Ό μΆ”μΆœν•  수 있게 ν•˜λŠ” 것이 params method이며 이 λ§€κ°œλ³€μˆ˜(id)λ₯Ό ν‚€λ‘œ Postsν…Œμ΄λΈ”μ„ κ²€μƒ‰ν•˜λŠ” 것이 findmethod의 역할이닀. 즉, set_postλŠ” λ§€κ°œλ³€μˆ˜(id)λ₯Ό μΆ”μΆœν•΄ Postsν…Œμ΄λΈ”μ„ κ²€μƒ‰ν•˜κ³  κ²°κ³Όλ₯Ό @post에 μ €μž₯ν•˜λŠ” method이닀.

view helper

index와 동일함.

3. New / Create μ•‘μ…˜

μž…λ ₯ 양식을 좜λ ₯ν•˜λŠ” new action, λ²„νŠΌμ„ ν΄λ¦­ν–ˆμ„λ•Œ ν˜ΈμΆœλ˜λŠ” 데이터 등둝 처리λ₯Ό ν•˜λŠ” create action이 μžˆλ‹€.

  • new action은 @post = Post.new λΉ„μ–΄μžˆλŠ” post객체λ₯Ό μƒμ„±ν•˜λ©°, μ΄λ•Œ μƒμ„±λ˜λŠ” 객체둜 ν…œν”Œλ¦ΏνŒŒμΌ(new.html.erb)μ—μ„œ λͺ¨λΈμ˜ 속성을 μ•Œ 수 μžˆλ‹€.

  • post_paramsλŠ” μž…λ ₯μ–‘μ‹μœΌλ‘œ λΆ€ν„° μž…λ ₯받은 데이터λ₯Ό μΆ”μΆœν•  λ•Œ μ‚¬μš©λœλ‹€.

  • create actionμ—μ„œ post = Post.new(post_params)λŠ” hash값이 λͺ¨λΈμ— λŒ€μ‘λ˜λŠ” μ†μ„±μœΌλ‘œ ν•œκΊΌλ²ˆμ— μ„€μ •μ΄λ˜λ©°, 였λ₯˜κ°€ λ°œμƒν• λ•Œ ν…œν”Œλ¦ΏμœΌλ‘œ ν”Όλ“œλ°± ν•˜λŠ”κ²Œ κ°€λŠ₯ν•˜λ‹€.

  • respond_toλ©”μ†Œλ“œλ‘œ μ§€μ •λœ ν˜•μ‹μœΌλ‘œ ν…œν”Œλ¦Ώμ΄ 좜λ ₯λ˜λŠ” ν˜•νƒœμ΄λ‹€.

    => html이라면 new.html.erbλ₯Ό ν˜ΈμΆœν•˜κ³ , json이라면 @post.errors에 JSONν˜•μ‹μœΌλ‘œ λ°”κΎΈμ–΄ 좜λ ₯ν•œλ‹€.

  • .save λ©”μ†Œλ“œλŠ” λ°μ΄ν„°λ² μ΄μŠ€μ™€ κ΄€λ ¨λœ 처리의 κ²°κ³Όλ₯Ό true or false둜 λ°˜ν™˜ν•œλ‹€. μ΄λŸ¬ν•œ μ„±μ§ˆμ„ μ΄μš©ν•΄μ„œ μ €μž₯성곡여뢀λ₯Ό ν™•μΈν•˜κ³  μ„±κ³΅ν•œ κ²½μš°μ™€ μ•„λ‹Œ 경우λ₯Ό λ‚˜λˆ μ„œ μ²˜λ¦¬ν•œ 것이닀.

  • redirect_to url [, option]λŠ” λ§€κ²¨λ³€μˆ˜λ‘œ μ§€μ •ν•œ url둜 μ΄λ™ν•˜κ²Œ λ§Œλ“  것이닀.

  • λΆ€λΆ„ ν…œν”Œλ¦Ώμ€ 메인 ν…œν”Œλ¦Ώμ—μ„œ λΆˆλŸ¬λ“€μ΄λŠ” ν…œν”Œλ¦Ώμ΄λ‹€. _<이름>.html.erbν˜•νƒœλ‘œ νŒŒμΌμ΄λ¦„ μ•žμ— _κ°€ λΆ™μ—¬μ•Όν•œλ‹€.

    form에쓰인 μž…λ ₯양식은 μ‹ κ·œλ“±λ‘(new)/μˆ˜μ •(update)νŽ˜μ΄μ§€μ—μ„œ κ³΅ν†΅μœΌλ‘œ μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— λ”°λ‘œ λΉΌμ„œ μ‚¬μš©ν•¨μœΌλ‘œμ¨ μ½”λ“œμ˜ μ€‘λ³΅μž…λ ₯을 ν”Όν•œ 것이닀.

    view helper

  • λͺ¨λΈκ³Ό μ—°λ™λ˜λŠ” μž…λ ₯ 양식을 생성할 λ•Œ μ‚¬μš©

    1. μž…λ ₯값을 λͺ¨λΈμ˜ μ†μ„±μœΌλ‘œ λ³€ν™˜

    2. μˆ˜μ •, 였λ₯˜κ°€ λ°œμƒν• λ•Œγ… λͺ¨λΈμ˜ ν˜„μž¬κ°’μ„ μž…λ ₯ 양식에 좜λ ₯

  • form_for블둝 λ‚΄λΆ€μ—μ„œ f.label, f.text_filed(f.text_area), f.data_select, f.check_box, f.submitλ“±μ˜ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•¨.

    form forλ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” λ·° ν—¬νΌλ‘œ 각각 λͺ¨λΈκ³Ό κ΄€λ ¨λœ 라벨, ν…μŠ€νŠΈμƒμž, λ‚ μ§œ 선택 μƒμž, μ²΄ν¬λ°•μŠ€, μ œμΆœλ²„νŠΌμ„ μƒμ„±ν•œλ‹€.

<%= render 'form', post: @post %> renderλ₯Ό ν†΅ν•΄μ„œ λΆ€λΆ„ν…œν”Œλ¦Ώ ν˜ΈμΆœμ„ ν•˜κ³  μžˆλ‹€.

4. Edit / Update μ•‘μ…˜

μˆ˜μ •ν™”λ©΄μ€ νŽΈμ§‘ μž…λ ₯ 양식을 좜λ ₯ν•˜λŠ” editμ•‘μ…˜κ³Ό 데이터 μˆ˜μ •μ²˜λ¦¬λ₯Ό μˆ˜ν–‰ν•˜λŠ” updateμ•‘μ…˜μœΌλ‘œ μ—°κ²°λ˜μ–΄μžˆλ‹€.

  • updateλ©”μ†Œλ“œλŠ” λ§€κ°œλ³€μˆ˜λ‘œ 받은 값을 μ‚¬μš©ν•΄ 데이터λ₯Ό λ³€κ²½ν•˜κ³  κ²°κ³Όλ₯Ό λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯ν•œλ‹€. update도 save와 λ§ˆμ°¬κ°€μ§€λ‘œ μˆ˜μ •μ„±κ³΅μ—¬λΆ€λ₯Ό true or false값을 λ°˜ν™˜ν•œλ‹€.

이 μ™Έμ˜ 것은 μ•žμ—μ„œ λ‹€ μ„€λͺ…됨

Destroy μ•‘μ…˜

destroy μ•‘μ…˜μ€ idλ§€κ°œλ³€μˆ˜λ₯Ό ν‚€λ‘œ 객체λ₯Ό μΆ”μΆœν•˜κ³  이λ₯Ό μ œκ±°ν•œλ‹€. 데이터λ₯Ό μ œκ°€ν• λ•ŒλŠ” .destroyλ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.

Last updated

Was this helpful?