rtf模板中的条件或循环语句

时间:2019-01-01 03:32:00

标签: ruby-on-rails rtf

我已经预定义了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 :(得分:0)

您的代码只需要用一系列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)

(注意:我不是Rails程序员,所以我只能给出想法,而不是实际代码)