Bien que je sache que vous êtes censé utiliser un assistant dans une vue, j’ai besoin d’un assistant dans mon contrôleur pour créer un object JSON à retourner.
Ça va un peu comme ça:
def xxxxx @comments = Array.new @c_comments.each do |comment| @comments < comment.id, :content => html_format(comment.content) } end render :json => @comments end
Comment puis-je accéder à mon aide html_format
?
Note: Ceci a été écrit et accepté dans les Rails 2 jours; Aujourd’hui, la réponse du délinquant (ci-dessous) est la voie à suivre.
Option 1: Le moyen le plus simple est probablement d’inclure votre module d’aide dans votre contrôleur:
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
Option 2: Ou vous pouvez déclarer la méthode d’assistance comme une fonction de classe et l’utiliser comme ceci:
MyHelper.html_format(comment.content)
Si vous voulez pouvoir l’utiliser à la fois comme fonction d’instance et comme fonction de classe, vous pouvez déclarer les deux versions dans votre assistant:
module MyHelper def self.html_format(str) process(str) end def html_format(str) MyHelper.html_format(str) end end
J’espère que cela t’aides!
Vous pouvez utiliser
Dans Rails 5, utilisez la fonction helpers.helper_function
dans votre contrôleur.
Exemple:
def update # ... redirect_to root_url, notice: "Updated #{helpers.pluralize(count, 'record')}" end
Source: D’après un commentaire de @Markus sur une réponse différente. Je pensais 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
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:
class ApplicationController < ActionController::Base include ApplicationHelper ...
En général, si le helper doit être utilisé dans (juste) des contrôleurs, je préfère le déclarer comme une méthode d’instance de la class ApplicationController
.