Project

General

Profile

Actions

プラグインハンズオン サンプル » History » Revision 14

« Previous | Revision 14/20 (diff) | Next »
Haru Iida, 01/22/2011 04:33 PM


プラグインハンズオン サンプル

index アクションのサンプル

def index
    @issue_templates =
      IssueTemplate.find(:all, 
      :conditions => ['project_id = ?', @project.id])
end

index.html.erbのサンプル

<table class="list">
  <thead>
    <tr>
      <th>#</th>
      <th><%=h l(:field_title)%></th>
      <th><%=h l(:field_updated_on)%></th>
      <th>メモ</th>
    </tr>
  </thead>
  <tbody>
    <% @issue_templates.each do |template| %>
      <tr class="<%= cycle('odd', 'even')%>">
        <td><%= template.id %></td>
        <td><%= link_to h(template.title), :action => 'show', :id => template.id, :template_id => @template %></td>
        <td><%= format_time(template.updated_at)%> </td>
        <td><%=h template.note%></td>
      </tr>
    <% end %>
  </tbody>
</table>

show アクションのサンプル

def show
    @issue_template = IssueTemplate.find(params[:template_id])
end

モデルのサンプル

class IssueTemplate < ActiveRecord::Base
  unloadable
  belongs_to :project
  validates_presence_of :project_id, :title, :description
  validates_uniqueness_of :title, :scope => :project_id
end

create アクションのサンプル

def create
    # IssueTemplateのインスタンス作成
    @issue_template = IssueTemplate.new    
    @issue_template.project_id = @project.id
    if request.post?
      # POSTメソッドだったら値が入力されたということ。
      # formに入力された内容をIssueTemplateのインスタンスに設定。
      @issue_template.attributes = params[:issue_template]
      if @issue_template.save
        # 保存に成功した。
        # 成功したというメッセージを設定後、詳細画面。
        flash[:notice] = l(:notice_successful_create)
        redirect_to :action => "show", :id => @project,  :template_id => @issue_template.id
      end
      # 保存に失敗した場合には再度入力画面が表示される。
    end
  end

init.rbのサンプル

require 'redmine'

Redmine::Plugin.register :redmine_issue_templates do
  name 'Redmine Issue Templates plugin'
  author 'Haruyuki Iida'
  description 'This is a plugin for Redmine'
  version '0.0.1'
  url 'http://example.com/path/to/plugin'
  author_url 'http://example.com/about'
  requires_redmine :version_or_higher => '1.1.0'

  # 各アクションの権限定義。ここで定義した権限が管理メニューの「ロールと権限」に表示される。
  project_module :issue_templates do
    permission :edit_issue_templates,
      {:issue_templates => [:create, :update, :destroy]}
    permission :show_issue_templates,
      {:issue_templates => [:index, :show, :load]}
  end

  # プロジェクトメニューに追加するTABの定義
  # TABのキャプション、表示位置、TABをクリックした時に呼ばれるアクションなどを定義
  # ここではissue_templates_controllerのindexを呼ぶ設定。
  menu :project_menu, :issue_templates,
    { :controller => 'issue_templates', :action => 'index' },
    :caption => "チケットテンプレート", :after => :issues

end

index.html.erb のサンプル

<h2>IssueTemplates#index</h2>

<%= link_to '新規作成', :controller => 'issue_templates',
  :action => 'create', :id=>@project %>

create.html.erb のサンプル


<h2>テンプレートの作成</h2>

<%= error_messages_for 'issue_template' %>
<% labelled_tabular_form_for :issue_template, @issue_template, :action => 'update' do |f|%>
    <p>
      <%= f.text_field :title, :size => 50, :required => true %>
    </p>
    <p>
      <%= f.text_field :note, :size => 80, :label => l(:issue_template_note) %>
    </p>
    <p><%= f.text_area :description, :rows => 8, :cols=>60, :accesskey => accesskey(:edit), :class => 'wiki-edit' ,:required => true %></p>
    <%= submit_tag l(:button_apply) %>
  <% end %>

Updated by Haru Iida over 11 years ago · 14 revisions