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メソッドによる定義は便利なのだろう。
作成中のサービスも、よれよれ動くようになってきたので、そんな事もふまえて危ないことをやっていないか、もう一度見直してみる必要はありそうだ。