Модель Rails для вызова действия контроллера

Мне нужно вызвать действие внутри контроллера из метода внутри модели , Это то, что я часто делаю на другом языке (при работе с платформой MVC), однако я никогда не видел, чтобы это делалось в ruby ​​на рельсах. Действие ничего не отображает, оно просто обновляет переменную сеанса.

7
задан scott 19 August 2010 в 14:08
поделиться

2 ответа

Это не совсем то, что вы обычно делаете в шаблоне MVC. Ваша модель действительно должна содержать только бизнес-логику (и доступ к данным). Можете ли вы предоставить некоторую информацию о том, кому вы пытаетесь позвонить и почему? Обычно, когда вы пытаетесь сделать что-то подобное, возникает запах, будто что-то не там, где должно быть.

Обычно я это вижу так:

  • Модель - это объекты данных, которые также есть методы для бизнес-логики
  • Контроллер - это действия взятые вашим приложением, они контролируют модели и скажите им, что делать, они контролировать вид, чтобы сказать ему, что emit
  • View - это интерфейсный слой, он может быть в любом формате (html, js, xml), но у него очень мало логики для it

Если вы пытаетесь вызвать что-то в контроллере из модели, это может означать, что в вашей модели слишком много управляющей логики.

Или, возможно, у вас есть метод, который можно использовать повсюду (это вспомогательный метод, который фактически не связан с моделью и вашим контроллером). В этом случае вы должны поместить его в отдельный модуль в каталоге / lib.

Изменить: Да, переменные сеанса, вероятно, следует изменять / обновлять только в контроллере. Возможно, в вашей модели слишком много логики управляющих элементов? Возможно, переосмыслите, насколько тесно эта логика связана с реальной моделью, если она на самом деле является частью действия контроллера.

5
ответ дан 7 December 2019 в 12:13
поделиться

Если вы хотите вызвать действие контроллера (или изменить сессию, потому что 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
0
ответ дан 7 December 2019 в 12:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: