dhtmlxScheduler와 Ruby on Rails 연동하기
이 문서에서는 Ruby on Rails 프레임워크와 REST API를 사용하여 Scheduler를 서버 사이드에 연동하는 방법을 안내합니다.
다른 기술을 사용하고 있다면, 아래의 다른 연동 옵션을 참고하세요:
- "dhtmlxScheduler와 ASP.NET Core"
- "dhtmlxScheduler와 ASP.NET MVC"
- "dhtmlxScheduler와 Node.js"
- "dhtmlxScheduler와 PHP"
- "dhtmlxScheduler와 PHP:Slim"
- "dhtmlxScheduler와 PHP:Laravel 연동하기"
- "dhtmlxScheduler와 SalesForce LWC 통합하기"
- "dhtmlxScheduler와 dhtmlxConnector 연동하기"
이미 Ruby on Rails가 설치되어 있다면 바로 연동을 시작할 수 있습니다. 설치되어 있지 않다면, 설치 가이드를 참고하여 프레임워크를 설치하세요.
설치가 완료되면, 아래 단계에 따라 연동을 진행할 수 있습니다.
1단계. 프로젝트 생성
프로젝트를 새로 생성하려면 터미널에서 다음 명령어를 실행하세요:
rails new path/to/your/project
2단계. 컨트롤러 생성
다음으로, 애플리케이션을 통해 서버에 대한 사용자 요청을 처리할 컨트롤러를 추가합니다. 요청의 종류에 따라 별도의 컨트롤러를 두는 것이 좋습니다.
라우팅은 컨트롤러와 요청 타입을 연결해주는 역할을 합니다. 서로 다른 라우트는 서로 다른 액션에 대응하며, 각 액션은 뷰에 전달할 정보를 수집합니다.
아래 명령어로 "home"이라는 이름의 컨트롤러와 "index" 액션을 생성하세요:
cd path/to/your/project
rails generate controller home index
명령어 실행 후 새로운 파일들이 생성되었다는 메시지가 출력됩니다.
3단계. 라우팅 지정
라우팅을 설정하려면 config/routes.rb 파일을 엽니다. 상단 근처에서 아래와 같은 라인을 찾으세요:
get 'home/index'
이를 아래와 같이 교체하세요:
root :to => 'home#index'
get "data", :to=>"event#get", :as=>"data"
post "data(/:id)", :to => "event#add"
put "data/:id", :to => "event#update"
delete "data/:id", :to => "event#delete"
이제 아래 명령어로 서버를 실행하여 동작을 확인할 수 있습니다:
rails server
이후 브라우저에서 http://localhost:3000/ 을 열어보세요. 다음과 같은 페이지가 표시됩니다:

서버가 준비되었으니, 이제 뷰(View)를 추가할 차례입니다.
4단계. 소스 파일 포함하기
먼저, 여기에서 dhtmlxScheduler 패키지를 다운로드하세요.
아래의 단계를 따라 진행합니다:
- 패키지 내 codebase/dhtmlxscheduler.js 파일과 codebase/ext, codebase/locale 폴더를 프로젝트 디렉터리의 vendor/assets/javascripts/ 에 복사하세요.
아래와 같이 보일 것입니다:

- 다음 스타일 파일들을 추출하여 vendor/assets/stylesheets/ 에 복사하세요:
- codebase/dhtmlxscheduler.css
- codebase/dhtmlxscheduler_classic.css
- codebase/dhtmlxscheduler_flat.css
- codebase/dhtmlxscheduler_glossy.css
결과는 다음과 비슷합니다:

- "public" 디렉터리 내에 "assets" 폴더를 만들고, 다음 폴더들을 그 안에 복사하세요:
- codebase/imgs
- codebase/imgs_dhx_terrace
- codebase/imgs_flat
- codebase/imgs_glossy
아래와 같이 나타납니다:

- config/initializers/assets.rb 파일을 열고, dhtmlxscheduler.js 와 dhtmlxscheduler.css 를 precompile 리스트에 추가하세요:
Rails.application.config.assets.precompile += %w( dhtmlxscheduler.css )
Rails.application.config.assets.precompile += %w( dhtmlxscheduler.js )
5단계. 뷰 생성하기
이제 뷰(View)를 생성할 차례입니다. 뷰는 액션에서 수집된 정보를 화면에 표시합니다.
컨트롤러용 레이아웃이 별도로 없다면, Rails는 app/views/layouts/application.html.erb 파일을 모든 페이지의 기본 템플릿으로 사용합니다. 여기에 스케줄러의 JS와 CSS 파일을 아래와 같이 <head> 태그 안에 추가하는 것이 좋습니다:
<!DOCTYPE html>
<html>
<head>
<title>SchedulerRubyRest</title>
(= stylesheet_link_tag 'application',media:'all','data-turbolinks-track'=>true )
(= javascript_include_tag 'application', 'data-turbolinks-track' => true )
(= stylesheet_link_tag 'dhtmlxscheduler',media:'all','data-turbolinks-track'=>true )
(= javascript_include_tag 'dhtmlxscheduler', 'data-turbolinks-track' => true )
(= csrf_meta_tags )
</head>
<body>
(= yield )
</body>
</html>
다음으로, 2단계에서 생성한 "home" 컨트롤러의 뷰를 지정합니다. app/views/home/index.html.erb 파일을 열고, 스케줄러 컨테이너와 초기화 코드를 추가하세요:
<div id="scheduler_here" class="dhx_cal_container">
<div class="dhx_cal_navline">
<div class="dhx_cal_prev_button"> </div>
<div class="dhx_cal_next_button"> </div>
<div class="dhx_cal_today_button"></div>
<div class="dhx_cal_date"></div>
<div class="dhx_cal_tab" name="day_tab"></div>
<div class="dhx_cal_tab" name="week_tab"></div>
<div class="dhx_cal_tab" name="month_tab"></div>
</div>
<div class="dhx_cal_header">
</div>
<div class="dhx_cal_data">
</div>
</div>
<script>
scheduler.init("scheduler_here", new Date(2016,4,27), "week");
</script>
이제 http://localhost:3000/ 을 브라우저에서 열면, 비어있는 스케줄러가 표시됩니다:

이 단계에서는 스케줄러에서 이벤트를 추가 및 수정할 수 있지만, 아직 저장 기능은 동작하지 않습니다. 저장 기능을 위해서는 모델을 생성해야 합니다.
6단계. 모델 생성
Scheduler는 이벤트 엔티티와 함께 동작하므로, 이벤트 모델을 생성해야 합니다.
아래 명령어로 이벤트 모델을 생성하세요:
rails generate model Event start_date:datetime end_date:datetime text:string
필수 Event 객체 속성 및 설명은 관련 문서에서 확인할 수 있습니다.
모델 생성 후, 아래 명령어로 데이터베이스를 생성하세요:
rake db:migrate
다음 단계로 데이터 추가를 테스트할 수 있습니다:
- Rails 콘솔을 엽니다:
rails c
- 아래와 같이 이벤트를 추가하세요:
Event.create
:start_date => "2016-05-27 10:00:00",
:end_date => "2016-05-27 15:00:00",
:text => "Test";
- 모든 이벤트를 확인하려면 다음을 입력하세요:
Event.all
- 콘솔을 종료하려면 "exit"를 입력하세요.

이제 컨트롤러를 사용하여 스케줄러에서 데이터 로딩 및 저장을 구현할 차례입니다.