Redmineプラグインチュートリアルについて
Redmineのプラグインを作ろうと思い、redmine.jpを調べてみた。
探してみると「その他の文書」に「プラグインの開発」の項目がある。
プラグインの開発 | Redmine.JP
そこからredmine.orgのチュートリアルの日本語訳を見つけたのでやってみた。
プラグイン チュートリアル - r-labs
チュートリアルの実施
結論から言うと、プラグインを:project_menuにする箇所でエラーとなってしまった。
「メニューを拡張する。」の「プロジェクトメニューを拡張する。」にあるこのコード。
def index @project = Project.find(params[:project_id]) @polls = Poll.find(:all) # @project.polls end
controllerでvoteを呼んだときにparams[:project_id]に何も入っていないので、エラーとなる。
@project = Project.find(params[:project_id]) rescue ActiveRecord::RecordNotFound render_404 end
ちなみに、こうするとちゃんと404が出る。(Redmine本体のコードがこうだった。)
チュートリアルで見落としたところは無いようだったので、自分で書いてみた。
毎回パラメータで渡すのは嫌な感じもあるけど、どうなんだろう。
もっと本家のコードを見て書き方を覚えていかないと。
差分
チュートリアルに記載されているコードとの差分を置いておきます。
vendor/plugins/redmine_polls/app/controllers/polls_controller.rb
class PollsController < ApplicationController …… def vote poll = Poll.find(params[:id]) poll.vote(params[:answer]) if poll.save flash[:notice] = 'Vote saved.' - redirect_to :action => 'index' + redirect_to :action => 'index', :project_id => params[:project_id] end end …… end
vendor/plugins/redmine_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] %>) + <%= link_to 'Yes', {:action => 'vote', :id => poll[:id], :answer => 'yes', :project_id => params[:project_id]}, :method => :post %> (<%= poll[:yes] %>) / + <%= link_to 'No', {:action => 'vote', :id => poll[:id], :answer => 'no', :project_id => params[:project_id]}, :method => :post %> (<%= poll[:no] %>) </p> <% end %>