1. ホーム
  2. ruby-on-rails

[解決済み】Rails - コントローラの内部でヘルパーを使用する方法

2022-04-05 23:34:36

質問

ヘルパーはビューの中で使うものだと理解していますが、私はコントローラでJSONオブジェクトを作成し、それを返すためにヘルパーが必要です。

ちょっとだけ、こんな感じです。

def xxxxx

   @comments = Array.new

   @c_comments.each do |comment|
   @comments << {
     :id => comment.id,
     :content => html_format(comment.content)
   }
   end

   render :json => @comments
end

にアクセスするにはどうすればよいですか? html_format ヘルパーを使用することができます。

解決方法は?

注意事項 これはRails 2時代に書かれ、受け入れられたものです; 最近では キモオタの回答 がいいんじゃないでしょうか。

オプション1: おそらく最もシンプルな方法は、ヘルパーモジュールをコントローラにインクルードすることでしょう。

class MyController < ApplicationController
  include MyHelper

  def xxxx
    @comments = []
    Comment.find_each do |comment|
      @comments << {:id => comment.id, :html => html_format(comment.content)}
    end
  end
end

オプション 2: あるいは、ヘルパーメソッドをクラス関数として宣言し、このように使用することもできます。

MyHelper.html_format(comment.content)

インスタンス関数とクラス関数の両方として使えるようにしたい場合は、ヘルパーで両方のバージョンを宣言します。

module MyHelper
  def self.html_format(str)
    process(str)
  end

  def html_format(str)
    MyHelper.html_format(str)
  end
end

これが役立つといいのですが