2012-01-02 3 views
11

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

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

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

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

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

ответ

8

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

0

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

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

6

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

def itemprepare 
    concat(render(:partial => 'items/itemlist_summary')) 
end 
+0

Именно то, что я искал :) –

1

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

Я следовал отличной статье Thinking of Rails Helper to help DRY our view. Я использую 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 %> 

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

Смежные вопросы