2009-08-12 15 views
23

zdefiniowałem niestandardową metodę w application_helper.rb pliku jak poniżej:Jak wywołać metodę z helpera aplikacji z widoku?

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 

Potem próbował wywołać ją z myślą tak:

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

ale pojawia się strona błędu takiego :

NoMethodError in TrunksController#routesperswitch 

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

wiem, że to bardzo newbie pytanie, ale nie mógł znaleźć rozwiązanie od googlowania :( dzięki za pomoc

edytować/tutaj jest pełna application_helper.rb

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 

Odpowiedz

5

Twój TrunksController może nie być wystający z ApplicationController. Kontroler aplikacji zawiera pomocnika aplikacji, więc jeśli rozszerzysz swój kontroler, powinieneś mieć dostęp do tych metod.

Początek kontrolera powinno być coś takiego:

class TrunksController < ApplicationController 
+0

przykro, będąc noob, I nie dość dostać swoje odpowiedź. Mówisz, że mam już kontroler o nazwie Trunks. – b1gtuna

+0

Mówi, że 'TrunksController' nie dziedziczy po' ApplicationController' i dlatego nie ma dostępu do 'ApplicationHelper', co jest poprawną odpowiedzią tutaj. –

35

nie wiem, co jest problemem, ale można rozwiązać ten obejmuje application_helper w kontrolerze

class TrunksController 
    include ApplicationHelper 
end 

W widoku zadzwoń:

<%= @controller.rxtrnk %> 
+3

Ponieważ błąd to 'NoMethodError w TrunksController # routesperswitch', metoda jest wywoływana w kontekście kontrolera. Metody pomocnicze zwykle nie są dostępne ze sterowników, więc musisz wyraźnie uwzględnić moduł w miejscu, w którym zostały zdefiniowane, tak jak ez. sugeruje tutaj. –

+1

Jak zauważyła @Pete, nie dziedziczysz po 'ApplicationControllerze '- więc jeśli poprawisz pierwszy wiersz kontrolera, aby był" class TrunksController

18

Powinieneś się upewnić, że pomocnik zawierający wybraną metodę wywołanie jest zawarte przez bieżący kontroler (w twoim przypadku chcesz uwzględnić ApplicationHelper). Jest to kontrolowane za pomocą the "helper" method u góry kontrolerów.

Wielu programistów Railsowych domyślnie uwzględnia wszystkich pomocników, aby uniknąć konieczności myślenia o tym. W tym celu należy dodać „helper :all” na górze ApplicationController:

class ApplicationController < ActionController::Base 
    helper :all 
end

Można również zdecydować się na tylko obejmują ApplicationHelper:

class ApplicationController < ActionController::Base 
    helper ApplicationHelper 
end
Powiązane problemy