Условные операторы или операторы цикла в шаблоне rtf - PullRequest
0 голосов
/ 01 января 2019

У меня есть предопределенный rtf файл шаблона RTF_Template.rtf следующим образом:

{\rtf1\ansi\deff0{\fonttbl{\f0 \fswiss Helvetica;}{\f1 Courier;}}
{\colortbl;\red255\green0\blue0;\red0\green0\blue255;}
\widowctrl\hyphauto

{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs36 FirstName LastName\par}
{\pard \ql \f0 \sa180 \li0 \fi0 {\b UEI:} 103910\par}
{\pard \ql \f0 \sa180 \li0 \fi0 {\b Sex:\u160?}Female\par}
{\pard \ql \f0 \sa180 \li0 \fi0 {\b DOB:} 10/31/1980\par}
{\pard \ql \f0 \sa180 \li0 \fi0 {\b Email:} sample@email.com \par}

Я делаю изменения в этом формате что-то вроде:

rtf_template = Rails.root.join('doc', 'rtf_templates', 'RTF_Template.rtf')
content = File.read(rtf_template)
content.gsub!('FirstName LastName', @student.full_name)
content.gsub!('UEI', StudentIdentifier.primary_identifier.first&.name)
content.gsub!('103910', @student.primary_identifier&.value)
content.gsub!('Female', @student.gender)
content.gsub!('10/31/1980', @student.date_of_birth.strftime('%m-%d-%Y'))
content.gsub!('sample@email.com', @student.email)

Проблема:

В настоящее время я показываю только первый StudentIdentifier, который является основным в строке: content.gsub!('UEI', StudentIdentifier.primary_identifier.first&.name)

и значение настройки для того же идентификатора в строке: content.gsub!('103910', @student.primary_identifier&.value)

Пользователь может иметь несколько идентификаторов и значение для каждого идентификатора.Я могу получить доступ ко всем этим идентификаторам, используя цикл @student.identifiers.each do |p_id|, затем имя идентификатора в p_id[0] и значение в p_id[1]

Я хочу показать все идентификаторы в одном месте (после имени, до секса) втот же шаблон.

1 Ответ

0 голосов
/ 08 февраля 2019

Ваш код просто должен заменить один заполнитель последовательностью строк кода RTF.

Шаблон:

{\ rtf1 \ ansi \ deff0 {\ fonttbl {\ f0 \ fswiss Helvetica;} {\ f1 Courier;}} {\ colortbl; \ red255 \ green0 \ blue0; \ red0 \ green0 \ blue255;} \ widowctrl \ hyphauto

{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs36 FirstName LastName\par}
identifier_list
{\pard \ql \f0 \sa180 \li0 \fi0 {\b Sex:\u160?}Female\par}
{\pard \ql \f0 \sa180 \li0 \fi0 {\b DOB:} 10/31/1980\par}
{\pard \ql \f0 \sa180 \li0 \fi0 {\b Email:} sample@email.com \par}

И затем объедините пары имя / значение идентификатора, включаяокружающий код RTF, например

{\pard \ql \f0 \sa180 \li0 \fi0 {\b UEI1:} 103911\par}
{\pard \ql \f0 \sa180 \li0 \fi0 {\b UEI2:} 103912\par}
{\pard \ql \f0 \sa180 \li0 \fi0 {\b UEI3:} 103913\par}

И, наконец, замените заполнитель

content.gsub!('identifier_list', myIdentifierListsWithRTF)

(примечание: я не программист по рельсам, поэтому я могу дать только представление, а неактуальный код)

...