[ruby-on-rails] 레일즈-컨트롤러 안에서 헬퍼를 사용하는 방법

뷰에서 도우미를 사용해야한다는 것을 알고 있지만 반환 할 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) )를 사용하십시오.