ステータス変更機能の実装
では今度はステータスの変更機能を実装していきます。アクション名はtoggleとし,
まずはコントローラのコードです。
app/
def toggle
if request.xhr? && request.post?
server = Server.find(params[:id])
server.update_attributes!(:status => server.status ^ 3)
user = User.current # ①
comment = Comment.new(:comments => "#{user.login}さんが#{server.status_name}に変更しました。", :author => user)
server.comments << comment
render :update do |page|
page.replace_html "status_#{server.id}", server.status_name
page.visual_effect :shake, "status_#{server.id}"
end
end
end
①のUser.
次にビューのコードです。AJAXに対応するため,
app/
<%- @servers.each do |server| -%>
<tr class="<%= cycle("odd", "even") %> server">
<td><%=h server.name %></td>
<td><%= link_to_remote content_tag(:span, h(server.status_name), :id => "status_#{server.id}"), :url => { :action => "toggle", :id => server.id }, :method => "post" %></td>
</tr>
<%- end -%>
履歴の確認機能の実装
最後に履歴の確認画面を作ります。アクション名はshowとします。これも特にRedmineとは関連しないため, app/ app/ app/ これで一通りの実装が完了しました。こんな感じの画面になります。 今回は基本的なプラグインの開発方法を解説しました。ここまで見ていただいたように, RedmineやTracなどのプロジェクト管理ツールはプロジェクトのポータルページを兼ねることが多いと思います。そこに手軽に自作のシステムを組み込むことができる, 次回はワークフローとデプロイタスクを統合するContinuousDeploymentというプラグインを作成します。チケットやタイムラインとの連動についても解説していきますので,
def show
@server = Server.find(params[:id], :include => [:comments])
end
<%- @servers.each do |server| -%>
<tr class="<%= cycle("odd", "even") %> server">
<td><%= link_to h(server.name), :action => 'show', :id => server.id %></td>
<td><%= link_to_remote content_tag(:span, h(server.status_name), :id => "status_#{server.id}"), :url => { :action => "toggle", :id => server.id }, :method => "post" %></td>
</tr>
<%- end -%>
<h2><%=h @server.name %>のステータス変更履歴</h2>
<%- @server.comments.each do |comment| -%>
<p><%=h comment.created_on.strftime("%F %T") %> : <%=h comment.comments %></p>
<%- end -%>
まとめ