2012-04-17 13 views
10

he definido método en el ApplicationControllerCómo llamar a los métodos definidos en ApplicationController en modelos

class ApplicationController < ActionController::Base 
    helper_method :get_active_gateway 
    def get_active_gateway(cart) 
    cart.account.gateways 
    end 
end 

Cuando yo estoy llamando a este método en el modelo

class Order < ActiveRecord::Base 
    def transfer 
    active= get_active_gateway(self.cart) 
    end 
end 

Es error undefined local variable get_active_gateway tirar.

Así que escribió

class Order < ActiveRecord::Base 
    def transfer 
    active= ApplicationContoller.helpers.get_active_gateway(self.cart) 
    end 
end 

Luego se estaba lanzando error undefined method nil for Nilclass.

Estoy trabajando en Rails 3.2.0.

+2

Como las dos respuestas dijo que no se debe llamar a los métodos de controlador de sus modelos. No es recomendado Lea en Model View Controller (MVC). Para mantener las cosas independientes. Básicamente Model habla con el almacenamiento, el controlador habla con el modelo (no al revés) y ve las conversaciones con el controlador. –

+0

Debido al diseño de Rails, y al eliminar la posibilidad de llamar a ApplicationController.helpers (ahora), debe "repetirlo" con una definición de código dup en el modelo. Asegúrese de agregar un comentario en ambos lugares, de modo que si lo cambia en un lugar, recuerda ir y cambiarlo en el otro. – JosephK

Respuesta

6

¿Por qué necesitarías tal cosa? El modelo no debe saber sobre sus controladores. Quizás un rediseño de su sistema sea más apropiado en este caso.

Aquí hay un enlace a thread similar.

5

Como una opción de diseño, no se recomienda llamar a asistentes de controladores de sus modelos.

Simplemente puede pasar los detalles requeridos a los métodos de su modelo como argumentos.

 

def transfer(active_gateway) 
    active = active_gateway 
end 
Cuestiones relacionadas