⛏️
공부방
  • README.md
  • 프로젝트
    • ft_transcendence
      • 설계
        • 0. 프론트 디자인
        • 1. BackboneJS 뷰 객체
        • 2. API 설계
        • 3. 레일즈 라우팅 구현
        • 4. DB 설계
        • 5. 채널 설계
    • slab-saver
    • react-payment
  • 공부
    • HTML, CSS
      • GRID
      • emmet
      • position
      • CSS Unit
        • 단위 정리
        • 기준을 정해보자
        • em의 정확한 기준은 뭐야?
      • flex
      • NAVBAR 실습
      • 유튜브 화면 만들어보기
    • SQL
      • 이론
        • 1강 데이터베이스
        • 2강 다양한 데이터 베이스
        • 3강 데이터베이스 서버
      • 명령어
        • DB 관리
        • TABLE 관리
        • Constraints
        • SQL 명령어 - 1
        • SQL 명령어 - 2
        • SQL 명령어 - 3
        • SQL 명령어 - 4
        • SQL 명령어 - 5
    • Ruby
      • 루비 객체와 클래스
      • 곡괭이
        • Chapter2. Ruby.new
        • Chapter3. 클래스, 객체, 변수
        • Chapter4. 컨테이너, 블록, 반복자
        • Chapter5. 기능 공유하기
        • Chapter6. 표준 타입
        • Chapter8. 메서드 파헤치기
    • Python
      • 유용한 링크
    • RubyOnRails
      • 아직 정리하지 못한 것들
        • RSPEC 을 이용한 테스트 완전 자동화
        • 레일즈 이니셜라이징 과정
        • 액션케이블 구체적으로 정리하기
        • 웹팩으로 자바스크립트 모듈 관리하기
      • ACTIVE JOB
        • 액티브잡의 기본
        • 실전! 액티브 잡을 이용한 스케쥴링
        • 서버를 껏다 키면 스케쥴링 된 이벤트가 사라진다!
      • ACTION CABLE
        • 액션케이블 Consumer를 이용해서 문제 해결
        • 액션케이블 연결 순서
      • ACTIVE STORAGE
      • 모델
        • validation
          • seeds 데이터 validation 스킵
          • validation 검사가 save, update, create 모든 경우에 일어난다
          • validator 클래스
          • 커스텀Validation
          • validates format(정규표현식)
        • 액티브레코드 find의 다양한 활용
        • 한 레코드에 동시 접속 막자!! with_lock
        • 레일즈 where 사용법
        • 레일즈에서 모델 관련 이슈
        • 모델이름바꿀때명심할것
        • 모델의 includes 메서드
        • 연관 모델을 다른 이름으로 설정하고 가져오기
      • 기본 상식
        • form으로 전달되는 params를 분석해보자
        • StrongParameter 쿼리 배열 받기
        • view helper로 디버깅 하는 방법
        • css 파일을 수정했는데 적용이 안된다?
        • StrongParameter 일반데이터와 객체 데이터 한번에 받기
        • wrap-parameter body가 두 번씩 날라오는 이유
        • 컬렉션 map에서 요소 스킵하는법
        • CASE를 이용해서 정렬(일반적인 정렬 X)
        • 문자열(정규표현식)
        • TIME ZONE 설정하기
        • 커스텀exception
      • RSPEC으로 모델 테스트하기
      • 한 눈에 읽는 루비 온 레일즈
      • Perfect RubyOnRails
        • Chapter1. 소개
        • Chapter2. RubyOnRails 기본
        • Chapter3. 스캐폴딩
        • Chapter7. 라우팅
        • Chapter8. 테스트
    • Javascript
      • var, let, const 차이
      • 브라우저 동작 원리
      • 디바운싱과 쓰로틀링
      • Tagged Template Literal(styled-components)
      • IntersectionObserver 를 사용해서 스크롤 이벤트의 부하 줄여주기
      • EVENT LOOP
        • 자바스크립트에서 어떻게 비동기적인 실행이 가능한걸까?
        • 이벤트 루프의 동작
        • setTimeout이 실행되면 어떤 동작이 일어날까?
        • 블록은 실행이 보장된다
        • 콜스택에 있는 블록이 보장된다는 점을 이용해서 브라우저 죽이기
        • setTimeout 무한반복으로 브라우저는 죽을까?
        • Promise 무한반복으로는 브라우저를 죽일 수 있을까?
        • RAF는 그럼 뭐야?
      • forEach는 반복도중 멈출 방법이 throw 밖에 없다!
      • 임시
        • 정리할 것 목록
          • 자바스크립트 기본 문법
        • 이벤트 임시 정리
      • 유용한 링크
      • arrow function 을 이용한 bind 이슈 해결
      • preventDefault - passive
      • CRITICAL-RENDERING-PATH
      • setInterval에 클로져 개념 사용하기
      • 오디오 문제 이슈
      • 자바스크립트의 식과 문
        • 식과 문이란 무엇인가...
        • 식
          • 1. 기본값과 래퍼객체
          • 2. 참조값과 가비지컬렉팅
        • 식을 조금 더 자세히 알아보자
      • prototype, [[Prototype]] 차이
      • export, import 학습
      • ESlint
      • 아주아주기본
        • Chatper1. 기본
        • Chapter2. 타입
        • Chapter3. 연산자
        • Chapter4. 제어문
        • Chapter5. 배열
        • Chapter6. 함수
        • Chapter7-1. 객체
        • Chapter7-2. 객체
        • Chapter8. 표준객체
        • Chapter9. DOM
      • 이벤트 위임
      • 이벤트가 버블링 되서 root 까지 가다보면... 부모의 부모의 ... 모든 click 이벤트를 발동시키는거 아니야?
      • classList
    • BackboneJS
      • Backbone Model 프로토타입에 메서드 구현하기
      • BackboneJS의 각 요소의 역할과 책임을 확실히 이해하자
      • Window 이벤트를 listenTo로 감시하기
      • 뷰 자신이 자신을 지워야 할 때를 감지하려면 어떻게 해야하는가?
      • 백본 VIEW의 remove와 jquery의 remove 는 다르다!
      • 백본 컬렉션 URL에 쿼리 붙이기
      • index.html.erb와 BackboneJS의 결합
      • 백본 모델과 컬렉션에서 fetch 를 통해 JSON 가져오기!
      • 모델은 urlRoot, 컬렉션은 url
      • ISSUE
      • Absolute Beginner
        • Part1
        • Part2
        • Part3
        • Part4
    • 문제풀이
      • 01. 유효한 팰린드롬(leetcode: 125)
      • 02. 문자열 뒤집기(leetcode: 344)
      • 03. 로그파일 재정렬(leetcode 937)
      • 04. 가장 흔한 단어(leetcode: 819)
      • 05. 그룹 애너그램(leetcode: 49)
      • 06. 가장 긴 팰린드롬 문자열(leetcode: 5)
      • 07. 두 수의 합(leetcode: 1)
      • 08. 빗물 트래핑
      • 09. 세 수의 합(leetcode: 15)
    • BlackCoffeeStudy
      • level1
        • 1주차
    • express
      • Untitled
      • 구글 애널리틱스 연결하기
      • passport를 활용한 로그인
      • express-init 명령어 사용
      • ec2와 DBeaver
      • mariadb 설치
      • sequelize 설치 및 사용법
        • sequelize 설치
        • sequelize-cli 사용법
        • 모델 간 연관관계 맺기
        • Hook 사용하기
      • express-ejs-layout 활용하기
      • Bootstrap
      • npm install로 설치한 모듈 ejs에서 사용하기
      • 미들웨어
    • cypress
      • window.alert 테스트는 어떻게 하지?
      • 상수를 어디에 저장할건가?
      • before()와 beforeEach()
    • aws
      • aws로 프로젝트를 배포해보자!
      • nginx로 리버스프록시 서버를 만들자
      • github actions 로 푸쉬되면 자동으로 업데이트 하는 기능 만들어보기
    • react
      • Drag & Drop 를 이용해서 리스트 요소 순서 바꾸기
      • CRA에서 CRACO 사용하지 않고 절대경로 import(NODE_PATH)
      • useEffect내에서 state의 dependency 문제
      • IntersectionObserverAPI로 무한스크롤 구현
      • react-testing-library
        • 기본
        • react-router-dom 에서의 에러
        • event 발생시키기
        • Integration testing하기
        • async하게 렌더링 되는 요소 잡기
        • Mocking 하기
      • CRA로 만든 앱에서 절대경로로 import 해오기(alias하기)
      • 커스텀 훅 만들기
    • 타입스크립트
      • 조건부타입 (Conditional types)
      • Generics
      • Keyof 타입 오퍼레이터
      • Indexed Access Types
      • 타입 챌린지
        • easy
          • 00. Awaited
          • 01. Concat
          • 02. Exclude
          • 03. First Of Array
          • 04. If
          • 05. Includes
          • 06. Pick
          • 07. Readonly
          • 08. Length
          • 09. Tuple to Object
        • mediun
          • 01. Absolute
    • Firebase
      • 파이어스토어 규칙
    • 기타
      • 협업 프로세스
      • UUID
      • 구글애널리틱스 설치하기
      • 드림코딩 강의
        • 포트폴리오
          • CSS
            • nth-child
            • CSS 팁
          • 자바스크립트
            • 1. 스크롤에 따른 navbar 의 색 변경하기
            • 2. navbar 버튼을 누르면 해당 페이지로 스크롤링 되게 만들자
            • 3. 스크롤 다운 하면 arrow-up 버튼 나오게 하기
            • 4. project 필터링 구현
            • 5. project 필터링에 transition 효과 넣기
      • GIT
        • 기본 사용법 정리
        • git remote update - remote 브랜치 가져오기
  • 기타
    • 이것저것
      • 독서
        • 클린코드
          • Chapter0. 나는 왜 클린코드 책을 읽는가?
          • Chapter1. 클린코드
          • Chapter2. 의미있는 이름
          • Chapter3. 함수
          • Chapter4. 주석
          • Chapter5. 형식 맞추기
      • 용어
      • IDE
        • RubyMine
          • 실전이 중요!
          • 1. Editor Basic
          • 2. Navigation
          • 3. Completion
          • 4. Refactoring
          • 5. Code Assistance
      • MAC에서 살아남기
        • Alfred - Spotlight 업그레이드
        • Vimium
        • BetterTouchTool - 트랙패드
        • 구름 입력기 - ESC, `
        • Spectacle - 화면 분할
    • 원티드 프리온보딩
      • 1주차
        • 월요일
        • 목요일
      • 2주차
      • 3주차
      • 4주차
      • 5주차
      • 6주차
    • 일기장
      • 2020
        • December
          • 20201208(화)
          • 20201209(수)
          • 20201210(목)
          • 20201211(금)
          • 20201214(월)
          • 20201215(화)
          • 20201216(수)
          • 20201217(목)
          • 20201218(금)
          • 20201219(토)
          • 20201221(월)
          • 20201222(화)
          • 20201223(수)
          • 20201224(목)
          • 20201226(토)
          • 20201228(월)
          • 20201229(화)
          • 20201230(수)
          • 20201231(목)
      • 2021
        • January
          • 20210101(금)
          • 20210102(토)
          • 20210105(화)
          • 20210106(수)
          • 20210107(목)
          • 20210108(금)
          • 20210109(토)
          • 20210112(화)
          • 20210113(수)
          • 20210114(목)
          • 20210115(금)
          • 20210117(일)
          • 20210118(월)
          • 20210119(화)
          • 20210120(수)
          • 20210121(목)
          • 20210125(월)
          • 20210126(화)
          • 20210127(수)
          • 20210128(목)
          • 20210129(금)
        • February
          • 20210201(월)
          • 20210202(화)
          • 20210203(수)
          • 20210204(목)
          • 20210205(금)
          • 20210207(일)
          • 20210208(월)
          • 20210209(화)
          • 20210217(수)
          • 20210218(목)
          • 20210219(금)
          • 20210220(토)
          • 20210222(월)
          • 20210223(화)
          • 20210224(수)
          • 20210226(금)
          • 20210228(일)
        • March
          • 20210302(화)
          • 20210303(수)
          • 20210304(목)
          • 20210305(금)
          • 20210306(토)
          • 20210308(월)
          • 20210309(화)
          • 20210310(수)
          • 20210311(목)
          • 20210312(금)
          • 20210313(토)
          • 20210315(월)
          • 20210316(화)
          • 20210317(수)
          • 20210318(목)
          • 20210319(금)
          • 20210322(월)
          • 20210323(화)
          • 20210324(수)
          • 20210325(목)
          • 20210327(토)
          • 20210329(월)
          • 20210330(화)
          • 20210331(수)
        • April
          • 20210406(화)
          • 20210407(수)
          • 20210408(목)
          • 20210409(금)
          • 20210410(토)
          • 20210412(월)
          • 20210413(화)
          • 20210414(수)
          • 20210415(목)
          • 20210416(금)
          • 20210417(토)
          • 20210419(월)
          • 20210420(화)
          • 20210421(수)
          • 20210422(목)
        • July
          • 20210728(수)
Powered by GitBook
On this page
  • 요청 처 순서
  • 간단한 페이지 만들어보기
  • 1. 모델 생성
  • 컨트롤러 생성 & 조금 수정하기

Was this helpful?

  1. 공부
  2. RubyOnRails

한 눈에 읽는 루비 온 레일즈

구름에서 제공하는 강의입니다

요청 처 순서

  1. 클라이언트는 브라우저로 서버에 요청을 보낸다.

  2. 서버는 클라이언트가 요청한 URL을 분석해 라우트를 찾는다.

  3. 라우트를 처리하는 컨트롤러와 액션 메서드를 찾는다.

  4. 컨트롤러는 모델(DB)에서 요청을 처리할 아이템을 찾는다.

  5. 이후 해당하는 아이템을 가지고 view를 만든다.

  6. 지금 처리하는 액션메서드의 멤버변수들은 view의 html.erb에서 동적으로 사용할 수 있는 변수다.

  7. 컨트롤러에의해 뷰가 만들어지면 이제 클라이언트한테 보낸다.

  8. 클라이언트는 만들어진 뷰를 본다.

간단한 페이지 만들어보기

1. 모델 생성

  1. rails generate model Post

    • 생성된 파일을 살펴보자.

  2. db/migrate/xxxx_crate_posts.rb 파일을 열어보자

    • 현재 여기에는 틀만 잡혀있을 뿐이다.

    • 만약 틀뿐이 아니라 칼럼들도 미리 생성하고 싶다면 1번에서 rails generate model Post title:string content:text

  3. 어땟든 다시 와서 생성하고 싶은 열을 코드로 만든다

     t.string :title
     t.text :content
  4. 마이그레이션 파일에서 테이블의 기본 설정을 정의했으니 이를 실행하여 실제 테이블을 생성

    • rake db:migrate

    • 결과로 db/schema.rb가 생성된다.

컨트롤러 생성 & 조금 수정하기

1.rails generate controller posts index new create show

  • posts가 컨트롤러고 뒤에 나오는 이름들은 액션 메서드

  • 위처럼 액션 메서드를 인자로 넣어주면 route, controller, view가 자동으로 생성된다. (액션 메서드에 맞게)

  • 이후 view가 필요없는 동작들은 view 파일을 삭제해주자

2. index 를 만들자 (route, action, view 설정)

  • config/routes.rb 는 앞에서 액션 메서드를 인자로 주어서 자동으로 생성된다.

  • 다만 root는 생성이 안됐으므로 root 'posts#index'를 입력해주자

  • posts#index 에서 posts는 컨트롤러, index는 액션메서드를 뜻한다.

  • 이제 index 액션 메서드를 만들자. app/controller/posts_controller.rb에서 index 메서드를 수정하면 됨.

    • 컨트롤러의 액션 메서드에서 현재 해줄거는 view 파일에서 사용할 변수를 정의해주는것. index 뷰에서 클라이언트한테 보여줄 데이터는 현재 등록된 자료들이다. 즉 등록된 모든 자료들에 대한 변수를 컨트롤러에서 정의해주면 된다.

    • @posts = Post.all

  • index.html.erb 파일을 수정해주자. 여기서는 반복문을 통해서 posts를 출력하면 됨.

3.new 만들기 (route, action, view 설정)

  1. new페이지에서는 액션을 사용하지 않는다.

    • 왜? 클라이언트가 주소/new 에 접근했을 때 따로 서버에 저장되어 있는 데이터를 가져오지 않기 때문. index 를 보면 index 의 view 에서 모든 저장되어 있는 데이터 라는 변수가 필요하기 때문에 index_action에 변수를 만들어줬다. 하지만 new는 따로 그럴필요가 없기 때문에 따로 건들지 않는다.

  2. view를 만들어주자. 여기서는 데이터를 넣은 다음에 버튼을 눌러야 하므로 html 파일을 양식에 맞게 만들어 주면된다. 여기서 주의할 건 <form action="/posts/create" method="POST"> 이다. 버튼을 누름으로써 post 메써드로 /posts/create 주소에 요청을 보내는 것!

    • 또한 authenticity_token 을 이용해 보안도 신경씀.

  3. 이제 라우트를 수정하자.

    • config/routes.rb에 접근하자. create 액션 메서드를 사용할 때는 post http 메서드를 사용한다는 것을 알았으므로 이에 맞게 수정해주자.

4.create 만들기

  1. 3번에서 new의 view 파일에서 버튼을 누르면 그 결과로 post http 메서드로 /posts/create 로 요청을 보낸다는 것을 알았다.

  2. 먼저 액션 메서드를 건드려보자

  3. posts_controller.rb파일에 들어가 Post.create()를 하자.

    • 그리고 2번에서 create는 view가 없어도 되기 때문에 삭제를 했으므로 이 액션메서드를 호출한 이후에는 반드시 다른 view로 redirect가 되어야 한다.

    • 이 때 사용하는게 바로 redirect_to. redirect_to "/posts/index"로 이동하게 만들자

5.show 만들기

  1. show 페이지는 상세보기 페이지다.

  2. 현재 존재하는 데이터를 가지고 만든다.

  3. /posts/show/1처럼 어떤 데이터를 볼건지 명시를 해야한다. 그러면 서버는 들어온 1 을 이용해서 해당하는 데이터를 찾는다. 즉 여기서 액션메서드의 행동이 만들어진다. 액션메서드는 클라이언트가 주소로 보내준 데이터를 가지고 클라이언트가 원하는 데이터를 찾고 변수로 세팅해주는 작업이 필요한 것.

  4. 먼저 index 파일에서 마지막에 a 태그로 posts/show/id 로 이동할 수 있게 만들어주자.

  5. 그리고 route를 설정해주자. 위에서 보았다싶이 posts/show/id로 요청이 들어오므로 이렇게 요청이 오면 posts 컨트롤러의 show 메서드를 실행할 수 있게 수정해줘야한다.

  6. 이후에는 액션 이 때의 액션 메서드를 정의해주자. 위에서 말했다시피 정보를 찾아와야한다. @post = Post.find(params[:id]) 를 해주자.

  7. 그리고 show html 파일을 수정해주자.

6.edit, update

  1. 먼저 게시글을 수정하는 링크를 생성하자. index html 파일을 수정해주자.

  2. 이제 라우터를 수정하자. show 처럼 edit 또한 /posts/edit/:id 와 같이 접근하므로 이 경로에 대해 posts#edit을 할 수 있게 만들면 된다.

  3. 접근할 수 있는 경로를 만들었으니 이제는 액션 메서드를 수정하자. edit 이라는 건 이미 존재하는 데이터를 가져와서 사용해야 한다. 즉 여기서의 액션 메서드는 현재 id에 해당하는 데이터를 찾는 것이다.

  4. 이후로는 view 파일을 수정하면 된다. new의 html 파일을 거의 그대로 가져오면 된다. 다른점은 이미 데이터가 존재 하므로 이를 처음부터 넣고 시작해야한다는 것이다.

  5. 그리고 버튼을 누르면 /posts/update/:id 주소로 post 메서드로 요청을 할 수 있게 수정해야한다.

  6. 여기서 주의해야 할 건 수정 버튼을 누르면 /posts/update/:id로 요청이 간다는 것이다. 따라서 라우트 설정에서 이 부분도 해주자.

  7. 이후 update의 액션 메서드를 제대로 수정해주자.

    • post를 찾고 update 를 해주면 된다.

7.destroy

  1. destroy는 삭제를 담당한다.

  2. 먼저 삭제를 할 수 있게 링크를 index의 html에 만들도록하자.

    • 여기서도 주의할 부분이 있는데 특정한 하나를 삭제하는 것이므로 :id를 신경써서 해야한다.

  3. 두 번째로 해야할 건 route 설정이다. 위에서 말했듯이 접근 주소는 /posts/destroy/:id 이므로 이 주소로 들어오게 된다면 posts#destroyㄹ를 할 수 있게 라우트를 설정해주자.

  4. 접근할 수 있는 경로를 만들었으니 이제 액션을 정의하자.

  5. 먼저 해당하는 데이터를 찾고, 그 데이터를 Post 테이블에서 삭제하는 작업이 필요하다. 그리고 인덱스 페이지르 redirect_to 하자

PreviousRSPEC으로 모델 테스트하기NextPerfect RubyOnRails

Last updated 4 years ago

Was this helpful?