Вызов действия контроллера из представления ... Или нет? - PullRequest
0 голосов
/ 16 ноября 2011

Я буду кратким: я должен вызвать Controller2.getByCriteria(some, criteria, here) из Controller1, затем установить переменную экземпляра для представления, чтобы использовать, или я должен вызывать ее из Controller1, используя что-то вроде = render Controller2.getByCriteria(some, criteria, here)?

Ответы [ 2 ]

2 голосов
/ 16 ноября 2011

Правильный способ сделать это - объявить метод контроллера (не действие контроллера) в качестве помощника.

См. Здесь .

2 голосов
/ 16 ноября 2011

Вообще говоря, вызов действия одного контроллера из другого является ошибкой проектирования.Это либо означает, что у вас есть общая бизнес-логика, которая подразумевает, что код должен быть в models (или, возможно, lib), либо у вас есть общая логика представления, которая подразумевает, что код должен быть в helpers.

Так что в вашем случае использование помощника кажется подходящим:

module ApplicationHelper
  # ...
  def getByCriteria(some, criteria, here)
    # handle criteria here
    # Something like: 
    # render :partial => 'foo'
  end
  # ...
end

А затем просто вызывайте его из представлений.

Если вам нужен полный контроллер / представление, похожее на общий доступ к компонентам через вашВ приложении вы можете использовать гем под названием cells.Это позволяет создавать контроллер многократного использования и просматривать компоненты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...