Während mir klar ist, dass Sie einen Helfer in einer Ansicht verwenden sollen, benötige ich einen Helfer in meinem Controller, wenn ich ein JSON-Objekt erstelle, um zurückzukehren.
Es geht ein bisschen so:
def xxxxx
@comments = Array.new
@c_comments.each do |comment|
@comments << {
:id => comment.id,
:content => html_format(comment.content)
}
end
render :json => @comments
end
Wie kann ich auf meinen html_format
Helfer zugreifen ?
ruby-on-rails
ruby-on-rails-3
ruby-on-rails-5
Ein Lehrling
quelle
quelle
Antworten:
Hinweis: Dies wurde 2 Tage in den Rails geschrieben und akzeptiert. Heutzutage ist die Antwort von Grosser der richtige Weg.
Option 1: Der wahrscheinlich einfachste Weg besteht darin, Ihr Hilfsmodul in Ihre Steuerung aufzunehmen:
Option 2: Oder Sie können die Hilfsmethode als Klassenfunktion deklarieren und wie folgt verwenden:
Wenn Sie es sowohl als Instanzfunktion als auch als Klassenfunktion verwenden möchten, können Sie beide Versionen in Ihrem Helfer deklarieren:
Hoffe das hilft!
quelle
html_format
- Sie brauchen nurMyHelper.html_format
in der zweiten.link_to
. Controller haben keinen Zugriff auf diese Methoden und die meisten meiner Helfer verwenden diese Methoden. Wenn Sie den Helfer in den Controller aufnehmen, werden alle Methoden des Helfers als öffentlich zugängliche Aktionen angezeigt, was nicht gut ist.view_context
ist der Weg in Rails 3.Sie können verwenden
helpers.<helper>
in Rails 5+ (oderActionController::Base.helpers.<helper>
)view_context.<helper>
( Rails 4 & 3 ) (WARNUNG: Dadurch wird pro Aufruf eine neue Ansichtsinstanz instanziiert.)@template.<helper>
( Schienen 2 )singleton.helper
include
der Helfer in der Steuerung (WARNUNG: Alle Hilfsmethoden werden in Steuerungsaktionen umgewandelt.)quelle
view_context.helper_function
einfach und funktioniert hervorragend.ActionController::Base.helpers.helper_function
ist genauso gut.view_context
= Genieview_context
. Es wird eine neue Ansichtsinstanz pro Aufruf instanziiert ...ActionController::Base.helpers.helper_function
scheint nicht zu funktionieren. Ich bekommeNoMethodError - undefined method spell_date_and_time' for #<ActionView::Base:0x007fede56102d0>:
beim VersuchActionController::Base.helpers.spell_date_and_time()
eine Controller-Methode aufzurufen . Anrufview_context.spell_date_and_time()
funktioniert jedoch.helpers.helper_function
in Ihrem Controller verwenden ( github.com/rails/rails/pull/24866 )Verwenden Sie
helpers.helper_function
in Rails 5 die in Ihrem Controller.Beispiel:
Quelle: Aus einem Kommentar von @Markus zu einer anderen Antwort. Ich hatte das Gefühl, dass seine Antwort eine eigene Antwort verdient, da sie die sauberste und einfachere Lösung ist.
Referenz: https://github.com/rails/rails/pull/24866
quelle
helper
Singular und im Controller Plural nennt .Mein Problem wurde mit Option 1 behoben. Der wahrscheinlich einfachste Weg besteht darin, Ihr Hilfsmodul in Ihren Controller aufzunehmen:
quelle
Wenn der Helfer in (nur) Controllern verwendet werden soll, deklariere ich ihn im Allgemeinen lieber als Instanzmethode von
class ApplicationController
.quelle
In Rails 5+ können Sie einfach die unten gezeigte Funktion mit einem einfachen Beispiel verwenden:
quelle
Verwenden Sie in Rails 5+ einfach Helfer ( helpers.number_to_currency (10000) ).
quelle