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)
并为 Line 上的相同标识符设置值:content.gsub!('103910', @student.primary_identifier&.value)
用户可以有多个标识符和针对每个标识符的值。我可以使用循环访问所有标识符,@student.identifiers.each do |p_id|
然后使用标识符名称p_id[0]
和值p_id[1]
我想在同一个模板中的同一个地方(名字之后,性别之前)显示所有标识符。
解决方案
您的代码只需将一个占位符替换为一系列 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)
(注意:我不是 ruby on rails 程序员,所以我只能给出想法,而不是实际代码)
推荐阅读
- java - 抽象接口的Jackson序列化
- rust - 解析 /proc/cpuinfo 失败
- javascript - 正则表达式:排除除数字、空格、加号和句点之外的所有内容
- excel - 在用户窗体的列表框中选择特定项目时,必须将另一个文本框中的文本复制到表格单元格
- sql - 如何在 SQL Server 中转换一些记录
- c++ - 通过引用使用 const int 创建静态数组
- docker - 将虚拟主机迁移到 Docker 容器有哪些优势?
- bash - F in * 的脚本
- git - `git reset -q` 可以等效于一些没有`-q` 的`git reset` 命令吗?
- docker - 为具有 Windows 主机的 Linux docker 容器上的卷配置用户和组