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

| コメント(0)

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メソッドによる定義は便利なのだろう。


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






コメントする

このブログ記事について

このページは、iwazerが2007年10月30日 00:20に書いたブログ記事です。

ひとつ前のブログ記事は「Radiant」です。

次のブログ記事は「iPodの認識が遅くなったのはmixi stationのせいだった」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。