Просмотр DRYing rails: частичный vs helper
Мне нужен совет по передовым методам для кода просмотра DRYing.
У меня есть три класса (NewsItem, RssItem и BlogItem) в моем приложении, которые используют отдельные представления, но в них есть похожие части. Одна из частей такова:
<% if current_user %>
<footer>
<%= marks_bar(@item) %>
<%= favorite_button(@item, "blog_item") || delete_from_favorite_button(@item, "blog_item") %>
<%= share_button(@item) %>
<% if current_user.is_mine?(@item) %>
<div><%= link_to "Edit", edit_user_blog_item_path(current_user, @item) %></div>
<% end %>
</footer>
<% end %>
Это почти равное для всех трех классов, поэтому я решил вывести его в какое-то отдельное место. И здесь я смущен: должен ли я использовать для этого частичный или вспомогательный метод?
Я знаю, что помощники используются в основном для ветки кода ruby от HTML, но в этом случае помощник будет выглядеть так:
def toolbar_for(item, type_str, edit_path)
if current_user
content_tag(:footer) do |b|
marks_bar(item).to_s <<
(delete_from_favorite_button(item, type_str) || favorite_button(@item, type_str)).to_s <<
share_button(@item).to_s <<
(content_tag(:div) { link_to("Edit", edit_path)} if current_user.is_mine?(@item)).to_s
end
end
end
Итак, здесь почти нет кода HTML.
Не могли бы вы дать мне совет, какой метод лучше по вашему мнению и почему? Кроме того, существуют ли некоторые проблемы с производительностью в этих методах (например, множественная конкатенация строк или частая частичная загрузка может быть дорогостоящей)? (Это приложение довольно загружено)
Ответы
Ответ 1
Я бы сказал, что это отличный пример частичного.
Я резервирую помощников для создания произвольного динамического содержимого. Это довольно простое описание, так как пример: я бы сделал помощником, который разбивает массив объектов ActiveRecord и отображает их в N столбцов. В этом случае передаваемая структура объекта каким-то образом используется для создания контента, но сам контент не имеет значения. Если вы думаете об этом, form_for также подходит для этого описания.
И наоборот, частичные файлы отлично подходят для "статического" контента, который необходимо повторно использовать на нескольких страницах. Например, вы должны создать частичное отображение отдельного элемента. Частичное определяет статическое представление определенного элемента.
Ваш пример лучше подходит ко второму ящику, на мой взгляд. Поскольку @item
не обрабатывается для создания контента, на самом деле его вряд ли используют. Кажется, что этот помощник в основном является кодом для других подходящих помощников (share_button
и marks_bar
). Идеальный вариант использования для частичного!
Ответ 2
Я бы использовал для этого частичный вид. Хорошее эмпирическое правило: если HTML - это результат, используйте частичный. Помощники не являются нежелательным ящиком вашего приложения Rails - они действительно должны использоваться для вывода данных, а не для представления. Хотя я обычно рекомендую, чтобы люди избегали помощников в целом, в пользу докладчиков, которые значительно недоиспользуются в мире Rails.