プロジェクト

全般

プロフィール

GuideControlSkelton » 履歴 » バージョン 5

NAITOH Jun, 2013/04/14 21:25
RESTfulな実装に変更。

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