プロジェクト

全般

プロフィール

GuideControlSkelton » 履歴 » バージョン 2

Mitsuyoshi Yoshida, 2011/06/26 00:40

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