Мне нужно вызвать действие внутри контроллера из метода внутри модели , Это то, что я часто делаю на другом языке (при работе с платформой MVC), однако я никогда не видел, чтобы это делалось в ruby на рельсах. Действие ничего не отображает, оно просто обновляет переменную сеанса.
Это не совсем то, что вы обычно делаете в шаблоне MVC. Ваша модель действительно должна содержать только бизнес-логику (и доступ к данным). Можете ли вы предоставить некоторую информацию о том, кому вы пытаетесь позвонить и почему? Обычно, когда вы пытаетесь сделать что-то подобное, возникает запах, будто что-то не там, где должно быть.
Обычно я это вижу так:
Если вы пытаетесь вызвать что-то в контроллере из модели, это может означать, что в вашей модели слишком много управляющей логики.
Или, возможно, у вас есть метод, который можно использовать повсюду (это вспомогательный метод, который фактически не связан с моделью и вашим контроллером). В этом случае вы должны поместить его в отдельный модуль в каталоге / lib.
Изменить: Да, переменные сеанса, вероятно, следует изменять / обновлять только в контроллере. Возможно, в вашей модели слишком много логики управляющих элементов? Возможно, переосмыслите, насколько тесно эта логика связана с реальной моделью, если она на самом деле является частью действия контроллера.
Если вы хотите вызвать действие контроллера (или изменить сессию, потому что session
определяется как @session
переменная и является приватной) из модели, вы должны передать экземпляр контроллера как параметр в метод модели, так что если вам нужно отредактировать session
метод может быть похож на
def change_session(controller)
@ses = controller.send :session
//some actions
end
in controller
def something
s = Session.new
s.change_session(self)
...
end