ヘルパーメソッドをつくろう

 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でコントローラーを生成する際に、同名で自動生成されるファイルである。ここにメソッドとして定義していく。

f:id:kc-masui:20190608114246p:plain

 

 

●ヘルパーメソッドの書き方

 メソッド定義同様def ~ endで囲んで定義していく。あくまでViewで使うメソッドですので、ブラウザでの表示を改定するような内容を定義します。

f:id:kc-masui:20190608120123p:plain

 今回は呟いた言葉を猫化させたり犬化させたりするメソッドと、消費税で表し直すメソッドを作る。

 今回はusers_helper.rbに書いてしまいましたが、本当はtweet_helper.rbの方が適切だったかなと思います。しかし、間違って関係のないhelperファイルに書いたメソッドも呼び出すことができました。そう、ヘルパーメソッドはどこに書いても呼び出すことはできるのです。

 ただし、やはりメソッドの管理のしやすさの問題から、きちんと関連のある場所に定義すべきですね。

 また、容易に呼び出せるので、同名のメソッドを作ってしまうとバッティングが起きてしまう。後に定義されているものが優先されるためメソッドが機能しないなんてこともありうるから注意が必要である。

 

●ヘルパーメソッドの呼び出し方

 ヘルパーメソッドはViewではどこからでも呼び出せるが、コントローラーやモデルでメソッドを呼び出すにはそのための書き込みをしなければならない。

class UsersController < ApplicationController

include ApplicationHelpers

end

  このようにincludeで呼び出せば使えるようになります。基本的にヘルパーメソッドはViewで使うものなので滅多にコントローラーやモデルから呼び出すことはないですが、もし使うときはこうする。

 ほかにも

view_context.helper_method

self.class.helpers.helper_method

 というような書き方をすればコントローラ内でメソッド利用ができる。こっちの方が局所的ですね。

 あと、コントローラー内に定義したメソッドをヘルパーメソッドとすることもできるという。

 class ApplicationController < ActionController::Base
  helper_method :current_user
  private

  def current_user
   @current_user = User.find(:user_id)
  end
 end

 コントローラーでも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