chociaż zdaję sobie sprawę, że powinieneś używać pomocnika w widoku, potrzebuję pomocnika w moim kontrolerze, gdy buduję obiekt JSON do zwrócenia.
Wygląda to trochę tak:
def xxxxx
@comments = Array.new
@c_comments.each do |comment|
@comments << {
:id => comment.id,
:content => html_format(comment.content)
}
end
render :json => @comments
end
jak mogę uzyskać dostęp do mojego html_format
pomocnika?
Odpowiedzi:
Uwaga: Zostało to napisane i zaakceptowane w Railsach 2 dni; W dzisiejszych czasach odpowiedź Grossera jest właściwą drogą.
Opcja 1: Prawdopodobnie najprostszym sposobem jest włączenie modułu pomocniczego do kontrolera:
Opcja 2: Lub możesz zadeklarować metodę pomocniczą jako funkcję klasy i użyć jej w następujący sposób:
Jeśli chcesz móc używać go zarówno jako funkcji instancji, jak i funkcji klasy, możesz zadeklarować obie wersje w pomocniku:
Mam nadzieję że to pomoże!
źródło
html_format
- potrzebujesz tylkoMyHelper.html_format
w drugiej.link_to
. Kontrolery nie mają dostępu do tych metod i większość moich pomocników używa tych metod. Również włączenie pomocnika do kontrolera ujawnia wszystkie metody pomocnika jako publicznie dostępne działania, co nie jest dobre.view_context
jest drogą do przejścia w Rails 3.Możesz użyć
helpers.<helper>
w Railsach 5+ (lubActionController::Base.helpers.<helper>
)view_context.<helper>
( Szyny 4 i 3 ) (OSTRZEŻENIE: tworzy instancję nowego wystąpienia widoku dla każdego połączenia)@template.<helper>
( Szyny 2 )singleton.helper
include
pomocnik w kontrolerze (OSTRZEŻENIE: przekształci wszystkie metody pomocnika w akcje kontrolera)źródło
view_context.helper_function
jest proste i działa świetnie.ActionController::Base.helpers.helper_function
jest równie dobry.view_context
= geniuszview_context
. Utworzy nową instancję widoku dla każdego połączenia ...ActionController::Base.helpers.helper_function
wydaje się nie działać. Pojawia się,NoMethodError - undefined method spell_date_and_time' for #<ActionView::Base:0x007fede56102d0>:
gdy próbuję wywołaćActionController::Base.helpers.spell_date_and_time()
metodę kontrolera. dzwonienieview_context.spell_date_and_time()
jednak działa.helpers.helper_function
w swoim kontrolerze ( github.com/rails/rails/pull/24866 )W Railsach 5 użyj
helpers.helper_function
w swoim kontrolerze.Przykład:
Źródło: Na podstawie komentarza @Markus na temat innej odpowiedzi. Czułem, że jego odpowiedź zasługuje na własną odpowiedź, ponieważ jest to najczystsze i łatwiejsze rozwiązanie.
Odniesienie: https://github.com/rails/rails/pull/24866
źródło
helper
liczbę pojedynczą, a w kontrolerze liczbę mnogą.Mój problem rozwiązany w opcji 1. Prawdopodobnie najprostszym sposobem jest włączenie modułu pomocniczego do kontrolera:
źródło
Ogólnie rzecz biorąc, jeśli pomocnik ma być używany w (tylko) kontrolerach, wolę zadeklarować go jako metodę instancji
class ApplicationController
.źródło
W Railsach 5+ możesz po prostu użyć funkcji pokazanej poniżej na prostym przykładzie:
źródło
W Rails 5+ prostu użyć pomocników ( helpers.number_to_currency (10000) )
źródło