bien que je réalise que vous êtes censé utiliser un assistant dans une vue, j'ai besoin d'un assistant dans mon contrôleur car je construis un objet JSON pour revenir.
Ça va un peu comme ça:
def xxxxx
@comments = Array.new
@c_comments.each do |comment|
@comments << {
:id => comment.id,
:content => html_format(comment.content)
}
end
render :json => @comments
end
comment puis-je accéder à mon html_format
assistant?
ruby-on-rails
ruby-on-rails-3
ruby-on-rails-5
Un apprenti
la source
la source
Réponses:
Remarque: cela a été écrit et accepté dans les Rails 2 jours; de nos jours, la réponse de Grosser est la voie à suivre.
Option 1: le moyen le plus simple consiste probablement à inclure votre module d'assistance dans votre contrôleur:
Option 2: Ou vous pouvez déclarer la méthode d'assistance en tant que fonction de classe et l'utiliser comme ceci:
Si vous voulez pouvoir l'utiliser à la fois comme fonction d'instance et fonction de classe, vous pouvez déclarer les deux versions dans votre assistant:
J'espère que cela t'aides!
la source
html_format
- vous n'avez besoin queMyHelper.html_format
dans la seconde.link_to
. Les contrôleurs n'ont pas accès à ces méthodes et la plupart de mes assistants utilisent ces méthodes. En outre, l'inclusion de l'aide dans le contrôleur expose toutes les méthodes de l'aide en tant qu'actions accessibles au public, ce qui n'est pas bon.view_context
est le chemin à parcourir dans Rails 3.Vous pouvez utiliser
helpers.<helper>
dans Rails 5+ (ouActionController::Base.helpers.<helper>
)view_context.<helper>
( Rails 4 et 3 ) (AVERTISSEMENT: cela instancie une nouvelle instance de vue par appel)@template.<helper>
( Rails 2 )singleton.helper
include
l'assistant dans le contrôleur (ATTENTION: transformera toutes les méthodes d'aide en actions du contrôleur)la source
view_context.helper_function
est simple et fonctionne très bien.ActionController::Base.helpers.helper_function
est tout aussi bon.view_context
= génieview_context
. Il instanciera une nouvelle instance de vue par appel ...ActionController::Base.helpers.helper_function
ne semble pas fonctionner. J'obtiensNoMethodError - undefined method spell_date_and_time' for #<ActionView::Base:0x007fede56102d0>:
en essayant d'appelerActionController::Base.helpers.spell_date_and_time()
une méthode de contrôleur. appelerview_context.spell_date_and_time()
fonctionne cependant.helpers.helper_function
dans votre contrôleur ( github.com/rails/rails/pull/24866 )Dans Rails 5, utilisez le
helpers.helper_function
dans votre contrôleur.Exemple:
Source: D'après un commentaire de @Markus sur une réponse différente. J'ai senti que sa réponse méritait sa propre réponse car c'est la solution la plus propre et la plus facile.
Référence: https://github.com/rails/rails/pull/24866
la source
helper
au singulier et dans le contrôleur, c'est pluriel.Mon problème a été résolu avec l'option 1. Le moyen le plus simple est probablement d'inclure votre module d'assistance dans votre contrôleur:
la source
En général, si l'aide doit être utilisée dans (simplement) des contrôleurs, je préfère la déclarer comme méthode d'instance de
class ApplicationController
.la source
Dans Rails 5+, vous pouvez simplement utiliser la fonction comme illustré ci-dessous avec un exemple simple:
la source
Dans Rails 5+, utilisez simplement des aides ( helpers.number_to_currency (10000) )
la source