2009-08-12 10 views
23

I défini une méthode personnalisée dans application_helper.rb fichier comme ce qui suit:Comment appeler une méthode dans l'assistant d'application à partir d'une vue?

def rxtrnk(line) 
    rxTRNK = /\w{9,12}/m 
    trnks = Array.new 
    i = 0 
    while i <= line.size 
     if line[i].match(rxTRNK) 
      trnks[i] = line[i].scan(rxTRNK) 
     end 
     i += 1 
    end 

    return trnks 
    end 

Alors j'ai essayé de l'appeler d'une vue comme ceci:

<% @yo = rxtrnk(@rts)%> 

Mais je reçois une page d'erreur comme celui-ci :

NoMethodError in TrunksController#routesperswitch 

undefined method `rxtrnk' for #<TrunksController:0x7f2dcf88> 

Je sais que c'est une question très novice, mais je ne pouvais pas trouver une solution de googler :( Merci pour votre aide

modifier/ici est le application_helper.rb plein

module ApplicationHelper 
    def rxtrnk(line) 
    rxTRNK = /\w{9,12}/m 
    trnks = Array.new 
    i = 0 
    while i <= line.size 
     if line[i].match(rxTRNK) 
      trnks[i] = line[i].scan(rxTRNK) 
     end 
     i += 1 
    end 

    return trnks 
    end 

end 

Répondre

5

votre TrunksController pourrait ne pas être d'étendre du ApplicationController. Le contrôleur d'application inclut l'assistant d'application, donc si vous l'étendez, vous devriez avoir accès à ces méthodes.

Le début de votre contrôleur doit être quelque chose comme:

class TrunksController < ApplicationController 
+0

désolé, être un noob, je ne suis pas tout à fait votre réponse. Voulez-vous dire que j'ai déjà un contrôleur nommé Trunks. – b1gtuna

+0

Il dit que 'TrunksController' n'hérite pas de' ApplicationController' et n'a donc pas accès à 'ApplicationHelper', ce qui est la bonne réponse ici. –

35

ne sais pas quel est le problème, mais vous pouvez résoudre ce problème en inclure le application_helper dans le contrôleur

class TrunksController 
    include ApplicationHelper 
end 

De l'avis appelez:

<%= @controller.rxtrnk %> 
+3

Puisque l'erreur est 'NoMethodError dans TrunksController # routesperswitch', la méthode est appelée dans le contexte d'un contrôleur. Les méthodes auxiliaires ne sont normalement pas accessibles depuis les contrôleurs, vous devez donc inclure explicitement le module là où ils sont définis, par exemple ez. suggère ici. –

+1

Comme @Pete l'a souligné, vous n'héritez pas de votre 'ApplicationController' - donc si vous fixez la première ligne de votre contrôleur à' class TrunksController

18

Vous devez vous assurer que l'assistant contenant la méthode que vous voulez L'appel est inclus par le contrôleur actuel (dans votre cas, vous souhaitez inclure le composant ApplicationHelper). Ceci est contrôlé en utilisant the "helper" method en haut des contrôleurs.

De nombreux développeurs Rails incluent simplement tous les helpers par défaut pour éviter d'avoir à y penser. Pour ce faire, ajouter « helper :all » en haut de votre ApplicationController:

class ApplicationController < ActionController::Base 
    helper :all 
end

Vous pouvez également choisir de n'inclure le ApplicationHelper:

class ApplicationController < ActionController::Base 
    helper ApplicationHelper 
end
Questions connexes