ビュー内でヘルパーを使用することになっていることに気付きましたが、返す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
お役に立てれば!
使用できます
helpers.<helper>
)のActionController::Base.helpers.<helper>
view_context.<helper>
(Rails 4&)(警告:これは呼び出しごとに新しいビューインスタンスをインスタンス化します)@template.<helper>
(Rails 2)singleton.helper
include
コントローラーのヘルパー(警告:すべてのヘルパーメソッドをコントローラーアクションにします)Rails 5では、コントローラーでhelpers.helper_function
を使用します。
例:
def update
# ...
redirect_to root_url, notice: "Updated #{helpers.pluralize(count, 'record')}"
end
出典:別の回答に関する@Markusのコメントより。彼の答えは、最もクリーンで簡単なソリューションであるため、それ自身の答えに値すると感じました。
オプション1で私の問題は解決しました。おそらく最も簡単な方法は、コントローラーにヘルパーモジュールを含めることです。
class ApplicationController < ActionController::Base
include ApplicationHelper
...
一般に、ヘルパーを(ちょうど)コントローラーで使用する場合、class ApplicationController
のインスタンスメソッドとして宣言することを好みます。
Rails 5+では、以下の簡単な例で示すように、関数を簡単に使用できます。
module ApplicationHelper
# format datetime in the format #2018-12-01 12:12 PM
def datetime_format(datetime = nil)
if datetime
datetime.strftime('%Y-%m-%d %H:%M %p')
else
'NA'
end
end
end
class ExamplesController < ApplicationController
def index
current_datetime = helpers.datetime_format DateTime.now
raise current_datetime.inspect
end
end
出力
"2018-12-10 01:01 AM"
class MyController < ApplicationController
# include your helper
include MyHelper
# or Rails helper
include ActionView::Helpers::NumberHelper
def my_action
price = number_to_currency(10000)
end
end
Rails 5+では、単にhelpersを使用します(-helpers.number_to_currency(10000))