TIL / 20211017 / RubyOnRails Route/Controller/View

설치

링크 참조

Rails 철학

  • DRY : 같은 코드를 반복하지 말 것
  • 설정보다 관습 : 기능에 대한 해결책을 제시해 설정 파일을 줄여줌
  • REST : 리소스와 표준 HTTP 요청에 적합한 웹 개발

MVC (모델, 뷰, 컨트롤러 아키텍쳐)

  • Models : 데이터베이스 테이블과 상호작용하는 규칙들 관리

  • Views : 유저 인타페이스 (html 파일)

  • Controllers : 모델과 뷰를 연결하는 역할

레일즈의 컴포넌트

  • Action Pack : 액션 컨트롤러과 액션 뷰를 포함하는 젬(MVC중 VC)
    Action Controller : 레일즈로 들어온 요청 처리 ex.세션관리, 템플릿 렌더링, 리다이렉트 관리
    Action Dispatch : 웹의 요청을 받아들여 원하는 곳으로 연결
    Action View : 뷰 관리 ex.템플릿 렌더링, 중첩폼(Nested),조각(partial)템플릿, AJAX 지원관리
  • Action Mailer : 내장된 메일 서비스 프레임워크
  • Active Model : 액션 팩(Action Pack) 서비스와 ORM 젬과 인터페이스를 정의
  • Active Record : 데이터 추상화 , 기본 CRUD 기능 , 객체들 간 관계 정의 기능
  • Active Resource : 웹 기반의 자원을 로컬 객체의 CRUD 처럼 매핑시킴
  • Active Support : 레일즈가 사용하는 유틸리티 클레스와 표준 루비 확장 모음
  • Railties : 여러 프레임워크와 플러그인을 이어주는 레일즈 코드

파일 구조 복잡 이유는 CoC 때문 각 요소가 맞은 역할이 다르기 때문
요소의 역할 파악하고 규칙에 따라 코드 작성시 최고 생산성 보장

Rails 개발할 때 꼭 필요한 부분

1.app/controllers : MVC 패턴 중 controller 해당 코드 담김

2.app/views : MVC 패턴 중 view에 해당 코드 담김. view는 controller 내부의 acrion과 일대일 매칭 되어 설정됨

3.app/models : MVC 패턴 중 model 역할을 수행. 내부 DB와 연동되어 관련 테이블을 class화 시킨 것

4.config/routes.rb : config 디렉토리에 포함되어있는 routes.rb 파일은 클라이언트에서 요청하는 url을 특정 controller의 action과 매칭 시킴

5.db/migrate : 테이블을 만들기 위한 코드들이 여기에 파일형태로 생성됨

6.db/schema.rb : 실제로 db에 테이블이 생성되면 생성되는 파일임 여기서 스피마 확인 가능

7.vendor/Gemfile : Ruby 라이브러리를 Gem이라 부름 여기에 Gem을 여기에 작성해 Rails 프로젝트에 추가가능

REST

  • 자원 표현을 위해 자원 식별자 사용 (가령 URL)
  • 시스템 컴포넌트 간에 자원 상태 교환

주요 명령어

1.hello라는 레일즈 프로젝트 생성 명령어

rails new hello cmd창에 입력

  1. 실행 명령여 (내장된 기본 서버 포트3000번으로 동작)

    rails s

서버에서 페이지 구동 방식

  1. 주소 Uri을 통한 http 요청 분석 :route.rb
  2. 요청 관련 내부처리 : controller
  3. 요청에 맞는 페이지로 응답 : view

Rails로 페이지 만들기

1.컨트롤러 파일 생성

$ rails generate controller home

실행 후 app/controllers/home_controller.rb 파일 생성

1.views 디렉토리의 하위 디렉토리는 controller 이름과 동일하게,
2.디렉토리 안에 포함된 파일 이름은 action 이름과 동일하게 맞추면 controller와 view가 자동으로 연결됨

2.controller 코드 작성

def 와 end 사이에 있는 내용을 action이라 부름
동일한 이름을 view와 자동으로 매칭

So rails에서 action은 서비스를 동작할 수 있는 행동임
행동은 사용자가 볼 수 있는 뷰 or 동작 로직이다.

3.view 코드 작성

index.html.erb 파일에 html 코드 추가

4.route 설정

config/routes.rb 파일에 코드 추가

Rails.application.routes.draw do
    # 코드 시작
    root "home#index" 
    get "home/index" => "home#index"
    # 코드 끝
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

설명:
root "home#index" 즉"/" 이 주소로 요청하면 home controller의 index action으로 보내라는 의미이다.(get "/"=>"home#index"와 동일한 코드)
home/index 주소에 get 방식으로 요청하면 home 컨트롤러의 index action으로 연결하라

cf. 규칙: Root 주소 controller#action

핵심정리
rails 서버에 요청을 보내면 요청을 보낸 uri 정보는 route, controller,view 순서대로 이동함

Rails 프로젝트에서 페이지를 만들려면
1.route에서 정의 된 uri
2.uri와 연결된 controller,action
3.controller, action과 연결된 view

다른페이지로 데이터 전달하기

1.form을 통해 서버(controller#action)로 데이터 전송
2.action에 있는 데이터를 연결된 뷰로 전달하여 출력

전체코드

routes.rb

Rails.application.routes.draw do
  root "home#index"
  get 'home/index'
  get 'home/next'
    # 코드 시작
    #root "home#index"
    #get "home/index" => "home#index"
    # 코드 끝
  # For details on the DSL available within this file, 
  #see http://guides.rubyonrails.org/routing.html
end

home_controller.rb

class HomeController < ApplicationController
  def index
  end

  def next
  end
end

index.html.erb

<h1>
	Home#index
</h1>
<p>
	Find me in app/views/home/index.html.erb
</p>
<a href="/home/next">home/next로 이동</a>

next.html.erb

<h1>
	Home#next
</h1>
<p>
	Find me in app/views/home/next.html.erb
</p>
<a href="/home/index">home/index 이동</a>

참고 자료

구름 강의 한눈에 읽는 루비온 레일즈 : 링크

좋은 웹페이지 즐겨찾기