Ruby数组元素高亮:如何将数组转为单句并高亮指定元素
解决方案
核心思路
解决问题的关键是阻止ERB自动转义HTML标签,同时将所有物品合并为单句展示。步骤分为:给目标物品添加高亮标签,再告知Rails渲染时保留HTML格式。
代码实现
- 先处理每个物品,为需要高亮的元素(比如库存外物品)生成带
<span>标签的内容:
# 基于物品库存状态处理每个元素 formatted_items = items.map do |item| if item.in_stock? # 库存内物品直接显示名称 item.name else # 库存外物品添加高亮span标签 "<span class='class-name'>#{item.name}</span>" end end
- 在ERB模板中用
to_sentence拼接成单句,并用raw或html_safe禁用转义:
<%= raw formatted_items.to_sentence %> # 也可以用html_safe替代raw <%= formatted_items.to_sentence.html_safe %>
防XSS的安全写法
如果物品名称是用户输入内容,直接拼接HTML有XSS风险,建议用Rails内置的content_tag生成标签:
formatted_items = items.map do |item| if item.in_stock? item.name else content_tag(:span, item.name, class: 'class-name') end end
渲染方式和上面一致,用raw或html_safe即可。
效果说明
这样就能生成一个完整的句子,其中目标物品会被<span class='class-name'>包裹实现高亮,不会拆分成两个独立句子。
内容的提问来源于stack exchange,提问作者lluz
相关产品推荐
相关产品推荐

