Ruby on Rails: 2007年10月アーカイブ

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

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


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

このアーカイブについて

このページには、2007年10月以降に書かれたブログ記事のうちRuby on Railsカテゴリに属しているものが含まれています。

前のアーカイブはRuby on Rails: 2007年7月です。

次のアーカイブはRuby on Rails: 2007年11月です。

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

imayomi(今読ミ)

ログール

Powered by Movable Type 5.04
あわせて読みたい