2012-04-17 2 views
10

я определил метод в ApplicationControllerКак вызывать методы, определенные в ApplicationController в моделях

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

Когда я называю этот метод в модели

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

Он бросает ошибку undefined local variable get_active_gateway.

Так что я написал

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

Затем он бросает error undefined method nil for Nilclass.

Я работаю в Rails 3.2.0.

+2

Как сказано в двух ответах, вы не должны вызывать методы контроллера из своих моделей. Это не рекомендуется. Читайте в контроллере просмотра модели (MVC). Держать вещи независимыми. В основном модель разговаривает с хранилищем, контроллер ведет переговоры с моделью (а не наоборот) и просматривает переговоры с контроллером. –

+0

Из-за дизайна Rails и удаления возможности вызова ApplicationController.helpers (теперь) вы должны «повторить себя» с использованием def-кода в коде. Обязательно добавьте комментарий в обоих местах, поэтому, если вы измените его в одном месте, вы не забудьте пойти и изменить его в другом. – JosephK

ответ

6

Зачем вам это нужно? Модель не должна знать о своих контроллерах. Возможно, в этом случае редизайн вашей системы будет более уместным.

Вот ссылка на похожие thread.

5

Как выбор дизайна, его не рекомендуется вызывать контроллеры контроллера из ваших моделей.

Вы можете просто передать необходимые данные своим методам модели в качестве аргументов.

 

def transfer(active_gateway) 
    active = active_gateway 
end