레드마인(Redmine) 플러그인 개발 가이드 - 3. 콘트롤러(controller) 생성

by Tom posted Dec 14, 2015
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄
이 문서는 Redmine 2.x 기반의 플러그인 개발 가이드입니다. 그리고 이 문서는 redmine.org의 플러그인 개발 가이드를 번역하였습니다. 

3. 콘트롤러(controller) 생성

아직까지 플러그인은 아무런 동작을 하지 않습니다. 플러그인이 동작되기 위해서는 콘트롤러(controller)가 필요합니다. 그래서 콘트롤러를 생성합니다. 이를 위해 플러그인 콘트롤러 생성기를 사용할 수 있으며, 그 문법은 다음과 같습니다: 

bundle exec ruby script/rails generate redmine_plugin_controller <plugin_name> <controller_name> [<actions>]

명령어 프롬프트로 돌아가서 다음을 실행합니다. 

$ bundle exec ruby script/rails generate redmine_plugin_controller Polls polls index vote
      create  plugins/polls/app/controllers/polls_controller.rb
      create  plugins/polls/app/helpers/polls_helper.rb
      create  plugins/polls/test/functional/polls_controller_test.rb
      create  plugins/polls/app/views/polls/index.html.erb
      create  plugins/polls/app/views/polls/vote.html.erb

콘트롤러 PollsController는 2개의 액션(#index, #vote)을 생성합니다.
이 두 액션을 구현하기 위해 plugins/polls/app/controllers/polls_controller.rb를 수정합니다.

class PollsController < ApplicationController
  unloadable

  def index
    @polls = Poll.all
  end

  def vote
    poll = Poll.find(params[:id])
    poll.vote(params[:answer])
    if poll.save
      flash[:notice] = 'Vote saved.'
    end
    redirect_to :action => 'index'
  end
end

그 다음 존재하는 polls에 출력하기 위해 plugins/polls/app/views/polls/index.html.erb를 편집합니다.

<h2>Polls</h2>

<% @polls.each do |poll| %>
  <p>
  <%= poll.question %>?
  <%= link_to 'Yes', { :action => 'vote', :id => poll[:id], :answer => 'yes' }, :method => :post %> (<%= poll.yes %>) /
  <%= link_to 'No', { :action => 'vote', :id => poll[:id], :answer => 'no' }, :method => :post %> (<%= poll.no %>)
  </p>
<% end %>

#vote 액션에의해 표현할 것이 없다면 plugins/polls/app/views/polls/vote.html.erb을 제거할 수 있습니다.

3.1 라우터 추가

Redmine은 기본적으로 와일드카드 라우터를 지원하지 않습니다. (':controller/:action/:id').
플러그인들은 config/routes.rb 파일에 라우터를 선언해야 합니다. plugins/polls/config/routes.rb에 두 액션을 위해 2 routes를 추가합니다. 

get 'polls', :to => 'polls#index'
post 'post/:id/vote', :to => 'polls#vote'

라우터에 대한 세부적인 사항은 다음 Rails 라우터 링크를 참조하세요.
  • http://guides.rubyonrails.org/routing.html.

이제 Redmine을 재시작하고 브라우저에서 http://localhost:3000/polls 를 실행합니다. 
2개의 투표(Poll)를 볼 수 있고 투표를 수행 할 수 있습니다.