ruby rails печатает определенные элементы из нескольких частичных файлов, находящихся в каталоге

У меня есть каталог, заполненный частями. Я хочу перечислить ТОЛЬКО первые теги h1 в каждом частичном. Методы выполнения этой задачи, вероятно, могут быть изменены для захвата и других элементов.

Прямо сейчас я использую ruby, чтобы открыть каждый файл, распечатать первые несколько символов, закрыть файл и повторить. Мои навыки парсинга файлов ruby ​​ограничивают меня. Вот код, который у меня есть на данный момент:

    <% Dir["app/views/partials/show/*.html.erb"].each do |f1| %>
        <% aFile = File.open(f1, "r") %>
        <% if aFile %>
            <% content = aFile.sysread(20) %>
            <p><%= content %></p>
        <% else %>
            <%= "Unable to open file!" %>
        <% end %>
    <% end %>

Я тоже думаю, что открываю весь партиал в памяти? Хотите знать, могу ли я просто читать, пока не найду свой тег h1, а затем закрыть файл и двигаться дальше? Опять же, я читаю только первые 20 символов, потому что еще не понял, как искать первый тег h1.

Я буду вносить изменения, когда работаю над открытием, разбором, фрагментом... Я ценю любые советы и указания, которые вы можете предложить. Спасибо!

EDIT: Основываясь на комментариях ниже, может быть гораздо лучший способ выполнить мою задачу. Поэтому я предоставляю дополнительную информацию, чтобы получить направление для других решений.

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

Я мог бы наложить класс на тег h1 «forNavigation» и на контент «sliderContent», а затем использовать jquery для создания пост-загрузки <ul>, но это не кажется правильным. Кроме того, все они будут частью одного визуализированного div.

Я думаю, я не понимаю, почему чтение первых 50 символов партиала, копирование того, что находится в тегах h1, и помещение его в a - не самое элегантное решение?

Как я уже сказал, выше делается все необходимое, кроме копирования и печати того, что находится между первым тегом h1... С парсером xml или каким-либо регулярным выражением это будет сделано. Я просто плохо разбираюсь в файлах.

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


person twinturbotom    schedule 30.10.2012    source источник
comment
Не вижу в этом особого смысла, поэтому может быть гораздо лучший способ решить всю вашу проблемную область. Но, возможно, взгляните на Nokogiri, который представляет собой синтаксический анализатор html, xml и sass и, скорее всего, сделает эту работу в одна-две строчки кода.   -  person thorsten müller    schedule 30.10.2012
comment
Нокогири не использует SASS. Это только HTML и XML.   -  person the Tin Man    schedule 30.10.2012
comment
Вы также должны переместить нужные фрагменты в отдельные частичные файлы, а не пытаться открыть и проанализировать их.   -  person the Tin Man    schedule 30.10.2012
comment
Скоро я буду работать с Nokogiri... Я бы предпочел хранить все в одном файле для простоты и согласованности... Спасибо.   -  person twinturbotom    schedule 31.10.2012
comment
нокориги выглядит довольно мощно и легко; Я немного беспокоюсь о том, чтобы требовать этого, так как я чувствую, что рубин имеет эту функциональность. Отличная информация; Я ценю это, Торстен   -  person twinturbotom    schedule 31.10.2012


Ответы (1)


Партиалы не предназначены для «анализа», а для рендеринга внутри других партиалов и шаблонов. Если вам нужно захватить часть партиала, вам, вероятно, следует извлечь эту часть как еще один партиал и использовать этот внутренний партиал как в «перечисленном» партиале, так и в «агрегированном» представлении.

person rewritten    schedule 30.10.2012