プロジェクト

全般

プロフィール

GuideControlSkelton » 履歴 » バージョン 1

Mitsuyoshi Yoshida, 2011/06/25 23:33

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