뷰에서 도우미를 사용해야한다는 것을 알고 있지만 반환 할 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>
에서 레일 5+ (또는ActionController::Base.helpers.<helper>
)view_context.<helper>
( Rails 4 & 3 ) (경고 : 통화 당 새로운 뷰 인스턴스를 인스턴스화 함)@template.<helper>
( 레일 2 )- 싱글턴 클래스에 도우미를 포함시킨 다음
singleton.helper
include
컨트롤러의 도우미 (경고 : 모든 도우미 메서드를 컨트롤러 작업으로 만듭니다)
답변
Rails 5에서는 helpers.helper_function
컨트롤러에서를 사용하십시오 .
예:
def update
# ...
redirect_to root_url, notice: "Updated #{helpers.pluralize(count, 'record')}"
end
출처 : 다른 답변에 대한 @Markus의 의견. 나는 그의 대답이 가장 깨끗하고 쉬운 해결책이기 때문에 자신의 대답이라고 생각했습니다.
참조 : https://github.com/rails/rails/pull/24866
답변
내 문제는 옵션 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.number_to_currency (10000) )를 사용하십시오.