Использование помощников Rails для рендеринга партиалов - PullRequest
13 голосов
/ 02 января 2012

Насколько я понимаю, помощники в основном используются для очистки представлений от некоторой логики, относящейся к представлению.

Но в моем текущем новом проекте (унаследованном приложении) я наткнулся на множество помощников, которые выглядят так:

def itemprepare
  render :partial => 'items/itemlist_summary'
end

Это правильно? Рендеринг частичного мне кажется чем-то, что вы хотели бы сделать в представлении, так как оно не содержит никакой логики, которую необходимо абстрагировать.

Должен ли я просто включить всех этих помощников?

Ответы [ 4 ]

10 голосов
/ 02 января 2012

Рендеринг частичного не принадлежит помощнику. Помощники должны помочь вам делать вещи, которые содержат логику. Логика не принадлежит контроллеру, если это не логика для рендеринга партиалов и определения, должно ли что-то отображаться или нет.

7 голосов
/ 10 августа 2012

Хотя вы обычно не должны использовать вспомогательные методы для рендеринга партиалов, я вижу, как в некоторых ситуациях это может быть необходимо.Для этих обстоятельств вам необходимо использовать метод concat:

def itemprepare
  concat(render(:partial => 'items/itemlist_summary'))
end
1 голос
/ 29 декабря 2014

Как говорит Ajedi32, частичное использование принадлежит представлениям, но иногда полезно использовать их в помощниках. Надеюсь, полезно показать, что я сделал в своем приложении:

Я следил за прекрасной статьей Thinking of Rails Helper, чтобы помочь СУХОЙ нашей точке зрения . Я использую Jquery Mobile с фиксированным заголовком, навигационной панелью, панелью навигации и нижним колонтитулом.

На каждой странице мне нужно включить нижний колонтитул и панель навигации, поэтому обычно это было бы:

  <div data-role="footer">
    <h4>Page Footer</h4>
  </div><!-- /footer -->
  <%= render "shared/nav_panel" %>
</div><!-- /page -->

в конце каждой страницы.

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

  # app/helpers/application_helper.rb
  def page_footer
    footer = content_tag :div , :"data-role" => "footer" do
      content_tag :h4, "Page Footer"
    end
    nav_panel = render(:partial => 'shared/nav_panel')
    footer + nav_panel
  end

и в представлении я просто звоню:

<%= page_footer %>

Это всего лишь короткий пример; на самом деле приложение имеет нижний колонтитул, который изменяется в зависимости от статуса входа в систему, языка пользователя и т. д.

0 голосов
/ 02 января 2012

У нас есть пара таких помощников в нашем проекте, но большинство из них находятся в нашей жемчужине.Обтекание частичного рендеринга с помощью помощника не позволяет приложению знать, как отображается информация, и мы можем легко расширять логику, изменять частичное или делать то, что мы хотим внутри этого помощника, пока он отображает запрошенную часть представления.Иногда для этих частичных данных требуются некоторые данные, которые находятся внутри самого драгоценного камня, и нет необходимости предоставлять их приложению.Таким образом, приложение вызывает вспомогательный метод (иногда без каких-либо параметров), который формирует необходимые параметры и локальные параметры и передает их частичным.

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

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