@Arsenikum

Зачем нужны хелперы в контексте контроллеров/вью?

Что такое хелпер в Ruby on Rails приложении? Зачем нужны хелперы в контексте контроллеров/вью?
  • Вопрос задан
  • 707 просмотров
Решения вопроса 1
@vsuhachev
Считается плохим тоном добавлять слишком много кода во view. Если этот код логически относится к контроллеру или модели то нет проблем - размещаете его там. Но иногда есть код чисто для представления. Например вам нужно отобразить список тэгов с локализацией.
I18n.t(tag, scope: "very.very.very.very.very.very.very.very.long.string.#{product.category}", default: tag.to_s.humanize)

Вы конечно можете разместить такой код в пердставлении
<%- product.tags.each do |tag| %>
  <p>
    <%= I18n.t(tag, scope: "very.very.very.very.very.very.very.very.long.string.#{product.category}", default: tag.to_s.humanize) %>
  </p>
<%- end %>


А можно убрать его в хэлпер

def localized_tags(product)
  product.tags.map do |tag|
    I18n.t(tag, scope: "very.very.very.very.very.very.very.very.long.string.#{product.category}", default: tag.to_s.humanize)
  end
end


И тогда вы получаете первое преимущество: читаемый код вьюхи
<%- localized_tags(product).each do |tag| %>
  <p><%= tag %></p>
<%- end %>


И второе преимущество: вы можете переиспользовать localized_tags, написать на него тесты и т.п. И ваши модели и контроллеры не засоряются логикой представления.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
mannaro
@mannaro
Умею профессионально гуглить
Точно не скажу, зачем они нужны в контроллерах, но вот в вьюхах они нужны для того, чтобы заранее определить какую-то функцию, чтобы использовать ее во вьюхе.
Думаю, в контроллере также, но для меня удобнее просто определить новый метод и использовать его как хелпер.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы