プロジェクト

全般

プロフィール

GuideControlSkelton » 履歴 » バージョン 3

NAITOH Jun, 2013/03/06 23:44
Redmine 2.x対応の記載に更新

1 1 Mitsuyoshi Yoshida
h1. コントローラのスケルトンの生成
2
3
次に MVC のうちの Control を作っていきましょう。
4
プラグイン、モデルのスケルトン作成と同様にコントローラにもスケルトン作成機能があります。
5
6
h2. コントローラ、アクションの名前を決める
7
8
今度もスケルトンを生成するにはまずコントローラとアクションの名前を決めておく必要があります。
9
 
10
コントローラはよくモデルを複数形にして名前が付けられます。モデルの名前は Foo としましたので、コントローラの名前を *Foos* にします。この複数形にするのは特にそう決まっているあるわけではありません。例えば、用語(Term)を管理するのは用語集(Glossary)、予約(Event)を管理するのはスケジュール張(Scheduler)といったように管理するデータをまとめる感じの分かりやすい名前であれば、何でも構いません。
11
12
次にアクションの名前を決めます。 [[GuideSampleSpec|サンプルの仕様]] で考えたアクションに対して、それぞれチケットなどの実装をまねて名前を付けました。
13
14
|_. アクション |_. 名前  |
15
| 一覧表示     | index   |
16
| 新規作成     | new	 |
17
| 詳細表示     | show	 |
18
| 編集	       | edit	 |
19
| 削除	       | destory |
20 3 NAITOH Jun
| プレビュー     | preview |
21 1 Mitsuyoshi Yoshida
22
23
h2. コントローラのスケルトン作成コマンドの実行
24
25
コントローラのスケルトンの実行コマンドの書式は次のような形です。
26
27
<pre>
28 3 NAITOH Jun
$ ruby script/rails redmine_plugin_controler プラグイン名 コントローラ名 [アクション名 ...]
29 1 Mitsuyoshi Yoshida
</pre>
30
31 3 NAITOH Jun
Redmine のトップディレクトリに移動して、決めた名前で実際にコマンドを実行するのですが、ここでは削除(destory)とプレビュー 	(preview)アクションは除いています。
32 1 Mitsuyoshi Yoshida
33
<pre>
34 3 NAITOH Jun
$ ruby script/rails generate redmine_plugin_controller redmine_standard foos index new show edit
35 1 Mitsuyoshi Yoshida
</pre>
36
37
実行結果
38
<pre>
39 3 NAITOH Jun
      create  plugins/redmine_standard/app/controllers/foos_controller.rb
40
      create  plugins/redmine_standard/app/helpers/foos_helper.rb
41
      create  plugins/redmine_standard/test/functional/foos_controller_test.rb
42
      create  plugins/redmine_standard/app/views/foos/index.html.erb
43
      create  plugins/redmine_standard/app/views/foos/new.html.erb
44
      create  plugins/redmine_standard/app/views/foos/show.html.erb
45
      create  plugins/redmine_standard/app/views/foos/edit.html.erb
46 1 Mitsuyoshi Yoshida
</pre>
47
48 3 NAITOH Jun
実行結果を見ていただけるとコントローラだけでなく、アクションに対応するビューもできていることが分かると思います。 Rails ではデフォルトではアクションを実行するとその名前に対応するビューのファイルを探してそれを表示するようになっています。削除(destory)とプレビュー (preview)は専用の画面を必要としていなかったので、スケルトンの生成では destory と preview を指定しませんでした。 このふたつは後でスケルトンを使わずに直接記述することにします。
49 1 Mitsuyoshi Yoshida
50
51
52
h2. コントローラの生成ファイル
53
54
コントローラの生成ファイル(app/controllers/foos_controller.rb )を見てみましょう。
55
56
<pre><code class="ruby">
57
class FoosController < ApplicationController
58
  unloadable
59
60
61
62
  def index
63
  end
64
65
66
  def new
67
  end
68
69
70
  def show
71
  end
72
73
74
  def edit
75
  end
76
77
end
78
</code></pre>
79
80
コントローラは ApplicationController クラスを継承したクラスで実現され、一つのメソッドが一つのアクションに相当します。
81 2 Mitsuyoshi Yoshida
2 行目の unloadable は Model で出てきたものと同じで、これを書いておかないと development モードで正常に動作しなくなります。
82 1 Mitsuyoshi Yoshida
83
84
h2. ビューの生成ファイル
85
86
ビューの生成ファイルとして app/views/foos/index.html.erb も見てみます。
87
88
<pre><code class="html">
89 3 NAITOH Jun
<h2>FoosController#index</h2>
90 1 Mitsuyoshi Yoshida
</code></pre>
91
92
といっても大して意味のない html が書かれているだけです。 ここに今後コントローラから渡されたデータなどの中身を書いていくことになります。
93
html ですが *Erb* という埋め込み型の ruby を使って、html 中で ruby のコードを実行できます。
94
95
96
h2. Erb (Embeded ruby)
97
98
Erb ではファイル内の *<%* と *%%>* の間が ruby スクリプトとして評価されます。
99
また、 *<%%=* と *%>* を使うとスクリプトの結果がファイルに埋め込まれます。
100
101
例えば、以下のようなコードを記述したとします。
102
103
<pre><code class="rhtml">
104
<% for val in [1, 2, 3] %>
105
  <%= val %> <br />
106
<% end %>
107
</code></pre>
108
109
生成されるファイルでは for などの繰り返しもちゃんと処理してくれます。また、 <%= %> は文字列中の #{} と同じで必ず to_s メソッドを使って文字列に変換されます。
110
111
<pre><code class="html">
112
  1 <br />
113
  2 <br />
114
  3 <br />
115
</code></pre>
116
117
118
---
119
120
| [[プラグイン開発ガイド|^]] | [[GuideInitRb|<<]] | [[GuideForProject|>>]] |