Rails помощник для представлений и контроллеров? - PullRequest
0 голосов
/ 15 декабря 2010

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

У меня есть помощник по работе с контактами под названием «полное имя», в котором объединены имя и фамилия контакта.

Часть макета, называемая подзаголовком, отображается в макете приложения и содержит следующий код:

<section id="subheader"><%= @subheader %></section>

Контроллеры устанавливают значение @ subheader.

Проблема в том, что я часто хочу "полное имя" в @subheader. Но это означает доступ к помощнику из контроллера. Этот метод полного имени должен находиться где-то еще?

Ответы [ 2 ]

2 голосов
/ 15 декабря 2010

С чем-то вроде полного имени я обычно определяю метод на самой модели.

Если бы метод полного имени выполнял какой-то тип форматирования HTML, я бы оставил эти части внутри помощника.

1 голос
/ 18 октября 2011

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

В файле помощников оберните код, к которому вы хотите получить доступ в модели, следующим образом:

module HelperModuleName
  [helper code here]
end

Обтеканиетолько код, который вам нужно использовать в ваших контроллерах (в отличие от включения всех помощников, использующих include ApplicationHelper), является хорошей идеей, потому что он уменьшает вероятность конфликтов имен методов и заставляет вас быть более осмотрительным в выборе использования помощников в контроллерах.

Теперь включите модуль в ваш application_controller.rb:

class ApplicationController < ActionController::Base
  protect_from_forgery
  include HelperModuleName
end
...