プロジェクト

全般

プロフィール

GuideControlSkelton » 履歴 » バージョン 4

NAITOH Jun, 2013/03/22 07:03
誤記修正。

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