2009-08-12 15 views
23

que define un método personalizado en application_helper.rb archivo como el siguiente:¿Cómo llamo a un método en el asistente de aplicación desde una vista?

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 

Luego trató de llamarlo desde un punto de vista de este modo:

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

pero me da una página de error como este :

NoMethodError in TrunksController#routesperswitch 

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

sé que esto es una pregunta muy novato, pero no he podido encontrar solución a partir de googlear :( Gracias por su ayuda

editar/aquí es el application_helper.rb completa

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 

Respuesta

5

su TrunksController podría no estar extiende desde el ApplicationController. El controlador de la aplicación incluye el Ayudante de la aplicación por lo que si extiende su controlador desde él, debe tener acceso a esos métodos.

El inicio de su controlador debe ser algo como:

class TrunksController < ApplicationController 
+0

lo siento, siendo un novato, que no bastante conseguir su respuesta. ¿Estás diciendo que ya tengo un controlador llamado Trunks? – b1gtuna

+0

Está diciendo que 'TrunksController' no hereda de' ApplicationController' y, por lo tanto, no tiene acceso al 'ApplicationHelper', que es la respuesta correcta aquí. –

35

no está seguro de cuál es el problema, pero se puede resolver esto incluye el application_helper en el controlador

class TrunksController 
    include ApplicationHelper 
end 

En la vista llame al:

<%= @controller.rxtrnk %> 
+3

Como el error es 'NoMethodError en TrunksController # routesperswitch', se llama al método en el contexto de un controlador. Los métodos de ayuda normalmente no son accesibles desde los controladores, por lo que debe incluir explícitamente el módulo donde están definidos, como ez. sugiere aquí. –

+1

Como señaló @Pete, no estás heredando de tu 'ApplicationController'; por lo tanto, si arreglas la primera línea de tu controlador para que sea' clase TrunksController

18

Debe asegurarse de que el ayudante que contiene el método que desea llamar está incluido por el controlador actual (en su caso, desea incluir el ApplicationHelper). Esto se controla usando the "helper" method en la parte superior de los controladores.

Muchos desarrolladores de Rails solo incluyen todos los helpers por defecto para evitar tener que pensar en esto. Para ello complemento "helper :all" a la parte superior de su ApplicationController:

class ApplicationController < ActionController::Base 
    helper :all 
end

También puede optar por incluir solamente la ApplicationHelper:

class ApplicationController < ActionController::Base 
    helper ApplicationHelper 
end
Cuestiones relacionadas