я определил метод в 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.
Как сказано в двух ответах, вы не должны вызывать методы контроллера из своих моделей. Это не рекомендуется. Читайте в контроллере просмотра модели (MVC). Держать вещи независимыми. В основном модель разговаривает с хранилищем, контроллер ведет переговоры с моделью (а не наоборот) и просматривает переговоры с контроллером. –
Из-за дизайна Rails и удаления возможности вызова ApplicationController.helpers (теперь) вы должны «повторить себя» с использованием def-кода в коде. Обязательно добавьте комментарий в обоих местах, поэтому, если вы измените его в одном месте, вы не забудьте пойти и изменить его в другом. – JosephK