[ruby] 다른 디렉토리에 있는 파일(클래스) 사용(require)

IT 관련 지식/루비|2022. 5. 5. 12:02
반응형
728x170

ruby는 require을 사용해서 다른 디렉토리에 있는 클래스 파일을 불러와 사용할 수 있습니다.

 


1. 과정

 

  1. 서버를 실행하고 웹 페이지에 접속하면 book의 show_book이라는 액션을 실행하도록 하기
  2. show_book 액션(함수)에서 다른 디렉토리에 있는 클래스의 함수를 호출

2. 실습

 

 

routes.rb 파일의 모습

 

 

 

common\book_utils.rb

controllers에는 book_controller.rb가 있고

 

여기서 common 폴더 있는 book_utils.rb를 호출하도록 한다

 

<book_utils.rb 내부>

book_utils.rb 모습

BookUtils라는 클래스 내부에

 

get_book_data라는 함수가 존재한다

 

해당 함수는 호출될 시 특정 문자열을 반환(return)한다

 

 

 

<book_controller.rb 내부>

book_controller.rb 내부

require을 사용해서 참조할 파일을 지정해줘야한다

 

' ./ ' 을 사용해서 루트 디렉토리에서부터 지정할수도 있고

 

' ../ ' 을 사용해서 상대 디렉토리를 사용해서 지정할 수 도 있다

 

BookUtils.new를 사용해서 클래스에 대한 객체를 만들어준다

 

생성한 객체를 사용하여 get_book_data 함수를 호출할 수 있다

 

300x250

 

반응형

댓글()

[rails] InvalidAuthenticityToken 에러 100% 해결법

IT 관련 지식/루비|2022. 4. 20. 15:10
반응형
728x170

rails에서 POST형태로 데이터를 보내면 token으로 올바른 페이지에서 보낸건지 확인하는 보안 처리 기능이 있다

 

이는 특히 form 태그를 사용할 때 많이 발생하는 문제인데

 

자동으로 token을 넣어서 데이터를 보내주기 때문에 form 헬퍼(form_tag로 된 form 태그)를 사용할 경우

 

InvalidAuthenticityToken 에러가 발생하지 않아야 한다

 

그래도 발생하는 경우가 있는데 그럴 경우 아래와 같은 방법을 사용하면된다

 


1. 해결 방법

 

app/controllers/application_controller.rb에 들어간다

 

application_controller.rb

 

여기에 다음과 같이 입력한다

protect_from_forgery with: :null_session, if: Proc.new { |c| c.request.format == 'application/json'}

그럼 다음과 같이 된다

 

이후 다시 POST를 해보면 해결된 것을 알 수 있다

 

가끔 인터넷을 보면 아래와 같이 그냥 protect_from_forgrey만 있는 걸 알 수 있는데

 

이거만 있으면 다른 부분이 안되는게 있기 때문에 꼭 내가 추가한 옵션을 넣어주도록 한다

 

300x250

 

반응형

댓글()

[rails6] 루비(rails)를 사용하여 CRUD 실현하기(기초)-2

IT 관련 지식/루비|2022. 4. 16. 12:22
반응형
728x170

이전 강의

 

https://mmol.tistory.com/256

 

[rails6] 루비(rails)를 사용하여 CRUD 실현하기(기초)-1

한국에는 ruby on rails를 사용한 강의가 너무 없어서 한 번 만들어보려고 합니다. (사실 루비보단 파이썬 장고가 조금 더 현대적인 언어이고 더 좋지만... 저는 이걸 해야해서 ㅠ) 저도 공부하면서

mmol.tistory.com

 

이번에는 직접 form을 만들고 데이터베이스에 컬럼을 추가해보겠습니다.

 

참고로 여기에 작성한 강의는 최신버전 or 실제 개발자들이 사용하는 방식이 아니라

 

rails를 사용하여 CRUD를 어떻게 구현할 수 있는가 설명하는 기초 강의입니다.

 


1. Form 생성하기

 

먼저 app/views/post 폴더 안에 다음과 같이 2개의 파일을 생성합니다.

 

 

그리고 index.html.erb에는 index를 입력하여 index 페이지에 들어갔을 때 해당 글자가 표시되게 합니다.

 

 

<시작 페이지 변경하기>

 

구름 IDE에서 F1 키를 누르면 프로젝트 내의 파일을 검색할 수 있습니다.

거기서 routes.rb를 찾습니다.

 

routes.rb 파일은 URL 경로에 따라 어떤 페이지를 보여줄지 정의하는 파일입니다.

 

다음과 같이 입력

routes.rb 수정

이렇게까지 하고 프로젝트를 실행해보면(오른쪽 위에 실행 버튼 있음)

 

다음과 같은 페이지가 뜹니다.

 

시작 페이지가 index.html.erb로 변경

 

<write.html.erb 파일 수정하기>

 

write.html.erb에선 form을 정의하여 데이터를 보낼 수 있게 합니다.

 

write.html.erb를 다음과 같이 작성

 

 

form 태그 안에 있는 내용을 설명하자면 

 

action은 form에 입력한 데이터를 어디로 보낼지 지정

 

method는 보내는 데이터 형식을 get 방식으로 할지 post 방식으로 할지 지정

 

각각의 input 태그는 데이터 형을 정의하며 키 이름을 어떤 이름(name)으로 할지 정의(값을 사용자가 입력한 값이 된다)

 

submit 버튼을 통해 해당 form에 입력한 데이터를 전송한다

 

<controller 정의>

 

app/controllers/post_controller.rb를 다음과 같이 수정한다

 

controller 수정

<rotues.rb 수정>

routes.rb를 다음과 같이 수정한다

 

 

<정리>

rails의 기본적인 작동 방법은 다음과 같다

 

1. 브라우저에서 웹사이트 경로 입력

 

2. routes.rb에서 해당 경로와 맞는 것을 찾음

 

3. routes.rb에 지정되어있는 controller 기능 실행

- "post#index"일 경우 controller의 post 폴더의 index 함수를 실행한다는 의미

 

4. 해당 함수의 이름과 동일한 html 파일을 보여준다

- "post#index"일 경우 layouts/post/index.html.erb를 보여준다

 


2. 데이터 베이스에 컬럼 추가하기

 

rails g model post로 생성된 데이터베이스에 대한 파일은

 

app/db/migrate 폴더 안에 생성된다

 

<schema.rb 파일>

현재 프로젝트의 모든 데이터베이스에 대한 정보가 나와있음

 

 

현재는 posts라는 데이터 테이블과

 

created_at, updated_at이라는 컬럼밖에 없음

 

여기에 title과 content라는 컬럼을 추가한다

 

터미널에 

 

rails g migration add_newdata_to_posts

를 입력한다

 

그럼 migrate 폴더 안에 날짜 + add_newdata_to_post.rb라는 파일이 생성된 것을 확인할 수 있다

 

그리고 그 안을 다음과 같이 작성한다

 

 

add_column은 컬럼을 추가하라는 함수이며

 

어떤 테이블에, 어떤 이름의 컬럼을 어떤 데이터 형으로 추가할지 정의한다

 

그다음에 터미널에

 

rails db:migrate를 한다

 

이렇게 하면 데이터베이스에 변경된 사항을 저장할 수 있다

 

이후에 schema.rb 파일을 확인하면 다음과 같이 컬럼이 추가된 것을 확인할 수 있다

 

추가된 컬럼들


여기까지 하면 CRUD에서 create을 위한 form 정의와 컬럼 생성까지 완료된다

300x250

 

반응형

댓글()

[rails6] 루비(rails)를 사용하여 CRUD 실현하기(기초)-1

IT 관련 지식/루비|2022. 4. 16. 10:45
반응형
728x170

한국에는 ruby on rails를 사용한 강의가 너무 없어서 한 번 만들어보려고 합니다.

 

(사실 루비보단 파이썬 장고가 조금 더 현대적인 언어이고 더 좋지만... 저는 이걸 해야해서 ㅠ)

 

저도 공부하면서 만들기 때문에 틀린 부분이 있다면 지적해주세요 ㅠ

 


1. CRUD란?

 

Create Read Update Delete의 약자

 

기본적으로 데이터를 생성, 삭제 등 데이터를 활용하는 것을 의미한다.

 

rails는 웹 프레임워크로 이를 간단히 구현할 수 있는 방법이 있다


2. rails 사용 환경 만들기

 

https://ide.goorm.io/my/dashboard

 

goorm

구름은 클라우드 기술을 이용하여 누구나 코딩을 배우고, 실력을 평가하고, 소프트웨어를 개발할 수 있는 클라우드 소프트웨어 생태계입니다.

www.goorm.io

 

여기서는 Goorm에서 제공하는 IDE를 사용한다

 

(기본적으로 바로 서버를 시작할 수 있게 세팅되어 있기 때문에 진짜 편하다...)

 

위 페이지에 들어가서 회원가입을 하고 

 

새 컨테이너를 생성한다

 

IDE의 설정은 다음과 같이 한다

 

 

"소프트웨어 스택"은 꼭 Rails를 선택한다

 

소프트웨어 스택

참고로 Goorm에서 제공하는 ruby의 버전은 2.6.5이며 Rails의 버전은 6.0.3이다

 

사실 소프트웨어 스택만 Rails로 설정하고 나머지는 손댈 필요 없이 컨테이너를 생성하면 된다


3. IDE 내부 화면

 

자동으로 생성된 Rails의 내부 화면은 다음과 같다

 

처음 생성된 Rails 프로젝트 화면

왼쪽에는 프로젝트에 필요한 파일 및 폴더 리스트가 있다

 

혹시 이 상태에서 Github에 저장하고 싶은 사람이 있다면

 

여기를 확인한다 https://mmol.tistory.com/252

 

구름(goorm) IDE에서 Github에 Commit 하고 push 하기

요즘 구름 IDE를 사용해서 개발을 하고있는데요 기존에 쓰던 jetbrain 사의 IDE랑 비교 했을 때 상당히 불편한 부분이 많더군요... 일단 제일 불편한 부분이 git이랑 연동하는 부분이었습니다. (왜 clon

mmol.tistory.com

 


4. DB 생성하기

 

CRUD를 실현하기 위해선 해당 데이터를 저장할 데이터 베이스와 그것을 표시할 화면이 필요하다

 

<화면 만들기>

 

Rails에서는 이를 간단하게 만들 수 있음

 

아래와 같이 터미널에 

rails g controller post

를 입력한다

 

이 커맨드의 뜻은

 

g는 generate의 약자이며

 

post라는 이름의 controller를 만들라는 뜻이다

 

여기서 controller란 컨트롤할 수 있는 화면(page)을 만드는 행위라고 생각하면 쉽다

 

rails g controller post

create된 파일 이름을 보면 views 안에 post라는 파일이 들어가는 등 화면에 대한 어떠한 파일이 생성되는 것을 알 수 있다

 

<데이터베이스 만들기>

 

터미널에

rails g model post

라고 입력한다

 

model은 데이터 베이스를 의미한다

 

즉, post라는 이름의 데이터 베이스를 생성한다

 

이후 터미널에 다음과 같이 입력한다

 

rails db:migrate

데이터베이스에 대한 정의를 수정한 뒤에는 반드시 이를 실시해야한다

 


다음 시간에는 직접 page를 만들고 데이터를 저장하는 방법에 대해 알아보겠습니다!

300x250

 

반응형

댓글()