Модель Rails для вызова действия контроллера - PullRequest
7 голосов
/ 19 августа 2010

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

Ответы [ 2 ]

5 голосов
/ 19 августа 2010

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

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

  • Модель - это объекты данных, которые также есть методы для бизнес-логики
  • Контроллер - это действия взятые вашим приложением, они контролируют модели и скажи им, что делать, они контролировать вид, чтобы сказать ему, что Испустите * +1008 *
  • View - это интерфейсный слой, это может быть в любом формате (HTML, JS, xml) но у него очень мало логики он

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

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

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

0 голосов
/ 19 августа 2010

Если вы хотите, чтобы действие контроллера вызова (или сеанс cahange, потому что session определяется как переменная @session и является частным) от модели, вы должны передать экземпляр контроллера в качестве параметра методу модели, поэтому, если вам действительно нужно редактировать sessionметод может быть похож на

def change_session(controller)
  @ses = controller.send :session
  //some actions
end

в контроллере

def something
  s = Session.new
  s.change_session(self)
  ...
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...