2007年10月30日

Helperをhelperメソッドで定義するのとincludeするのと

RailsのHelperはController内で

include HogeHelper

と書くのと、

helper :hoge

と書く方法があります。

恥ずかしながらこの違いがよく分らなかったのだが、いろいろ実験してみた結果、やっと分った気がしてきた。

まず前者はRubyの文法のinclude ModuleNameなので、Mixinしているのはすぐ分かる。

つまりHogeModule内に定義されているメソッドはHogeContorollerに定義されているのと同じ意味だ。

従って、views/hoge/*.rhtml内でも使えるし、もちろんHogeController内でも自由に使える。

私は後者について悩んでいたのだが、どうやらView側でだけ使用可能な状態にしてくれるらしい。つまりviews/hoge/hehe.rhtmlでは使用可能だが、HogeController内では未定義な状態。

はたして存在意義は?もちろんセキュリティーのためだと思われる。Controller内のpublicメソッドはアクションとして実行可能なので、Controllerは結構注意して書かなければいけない。

お気楽にHelper内に書かれたメソッドがControllerのアクションとして実行されると、まずい状況になりそうなことが容易に想像できる。逆に言えばHelperに書いたユーティリティーメソッドを気軽にViewだけで使用可能にしてくれるhelperメソッドによる定義は便利なのだろう。


作成中のサービスも、よれよれ動くようになってきたので、そんな事もふまえて危ないことをやっていないか、もう一度見直してみる必要はありそうだ。

投稿者 iwazawa : 2007年10月30日 00:20
コメント
コメントする









名前、アドレスを登録しますか?