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

    @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, написать на него тесты и т.п. И ваши модели и контроллеры не засоряются логикой представления.
    Ответ написан
    Комментировать