ヘルパーメソッドをつくろう
Railsにはもともと搭載されているメソッドがある。そのなかにヘルパーメソッドというものがある。
- link_to
- form_tag / form_for / form_with
- image_tag
など、よくお世話になる便利機能である。
ヘルパーメソッドはViewで活用されるものであり、htmlタグの要素をシンプルに省略して書けるようにしている。なのでブラウザに表示される際にはヘルパーメソッドがhtml要素に変換されてている。
さて、このヘルパーメソッドはRailsでもともと用意されているものだけではなく、自分でも設定できる。それをまとめる。
●ヘルパーメソッドの記載場所
Railsにおいては app/helpers/test_helper.rbのようにhelpersディレクトリにヘルパーメソッドを管理するファイルがある。これはrails g controllerでコントローラーを生成する際に、同名で自動生成されるファイルである。ここにメソッドとして定義していく。
●ヘルパーメソッドの書き方
メソッド定義同様def ~ endで囲んで定義していく。あくまでViewで使うメソッドですので、ブラウザでの表示を改定するような内容を定義します。
今回は呟いた言葉を猫化させたり犬化させたりするメソッドと、消費税で表し直すメソッドを作る。
今回はusers_helper.rbに書いてしまいましたが、本当はtweet_helper.rbの方が適切だったかなと思います。しかし、間違って関係のないhelperファイルに書いたメソッドも呼び出すことができました。そう、ヘルパーメソッドはどこに書いても呼び出すことはできるのです。
ただし、やはりメソッドの管理のしやすさの問題から、きちんと関連のある場所に定義すべきですね。
また、容易に呼び出せるので、同名のメソッドを作ってしまうとバッティングが起きてしまう。後に定義されているものが優先されるためメソッドが機能しないなんてこともありうるから注意が必要である。
●ヘルパーメソッドの呼び出し方
ヘルパーメソッドはViewではどこからでも呼び出せるが、コントローラーやモデルでメソッドを呼び出すにはそのための書き込みをしなければならない。
このようにincludeで呼び出せば使えるようになります。基本的にヘルパーメソッドはViewで使うものなので滅多にコントローラーやモデルから呼び出すことはないですが、もし使うときはこうする。
ほかにも
というような書き方をすればコントローラ内でメソッド利用ができる。こっちの方が局所的ですね。
あと、コントローラー内に定義したメソッドをヘルパーメソッドとすることもできるという。
コントローラーでもViewでも使うメソッドなら、コントローラーに定義しちゃおうということである。
さて、まとめると、ヘルパーメソッドはVIewで使うメソッドを定義するよってしっかり覚えておこう。
<参考URL> ありがとうございました。
https://www.sejuku.net/blog/28563
https://qiita.com/Yukaaaah/items/19e524fd0c0e4a3451f1
https://qiita.com/rin_mu/items/18353723c6a9d78d8473
https://qa.atmarkit.co.jp/q/96