web-dev-qa-db-fra.com

Comment appeler les méthodes ApplicationController depuis ApplicationHelper

Je veux fournir des liens csv dans une vue et j'ai placé le code de génération csv dans ApplicationHelper. Cependant, je reçois cette erreur:

undefined method `send_data' for #<#<Class:0x0000010151c708>:0x0000010151a070>

référençant ceci:

send_data content, :type => "text/plain",
  :filename => filename,
  :disposition => 'attachment'

Si je place le code csv dans un contrôleur, cela fonctionne bien. J'espérais utiliser l'aide pour éviter d'avoir à définir des itinéraires pour chaque contrôleur pour lequel je veux fournir des options csv (j'ai un tas). Comment puis-je faire send_data (et autres méthodes nécessaires) à la disposition de l’assistant?

48
David

Utilisation helper_method.

Par défaut, les méthodes dans ApplicationController ne sont accessibles qu'à l'intérieur des contrôleurs.

Ajoutez une méthode à ApplicationController et exposez-la en tant que méthode d'assistance avec helper_method:

class ApplicationController < ActionController::Base

  helper_method :foo

  def foo
    "bar"
  end

end

Maintenant, la méthode foo est accessible aux deux contrôleurs et vues.

111
Harish Shetty

Si le problème est de rendre les méthodes dans ApplicationHelper disponibles dans tous les contrôleurs, pourquoi ne pas ajouter une ligne

 inclut ApplicationHelper 

dans le fichier ApplicationController?

10
GeorgeW