bien que je sache que vous êtes censé utiliser un assistant dans une vue, j'ai besoin d'un assistant dans mon contrôleur lorsque je construis un objet JSON à retourner.
Ç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 assistant html_format
?
Note: Ceci a été écrit et accepté dans les Rails 2 jours; De nos jours, la réponse de Grosser (ci-dessous) est la voie à suivre.
Option 1: Le moyen le plus simple consiste probablement à inclure votre module d'assistance 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 en tant que fonction de classe et l'utiliser comme suit:
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 aide:
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 le 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. J'ai senti que sa réponse méritait sa propre réponse puisqu'il s'agit de la solution la plus propre et la plus facile.
Référence: https://github.com/Rails/rails/pull/24866
Mon problème est résolu avec l'option 1. Le moyen le plus simple consiste probablement à inclure votre module d'assistance dans votre contrôleur:
class ApplicationController < ActionController::Base
include ApplicationHelper
...
En général, si l'assistant doit être utilisé dans (juste) des contrôleurs, je préfère le déclarer comme méthode d'instance de class ApplicationController
.
Dans Rails 5+, vous pouvez simplement utiliser la fonction comme illustré ci-dessous avec un exemple simple:
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
SORTIE
"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
Dans Rails 5+, utilisez simplement helpers ( helpers.number_to_currency (10000) )