ruby-on-rails - HTML 标签的验证问题
问题描述
数据库保存输入表单中的 HTML 标记,我想剥离它们以进行正确的验证。我在 IRB 中测试了以下方法,它似乎工作正常。但是我无法弄清楚如何使用此方法进行验证。
这是我的模型中的代码:
class Task < ActiveRecord::Base
validates strip_tag(:text), length: {minimum: 3}, uniqueness: true
def strip_tag(record)
record.split(/\<.*?\>/).map(&:strip).reject(&:empty?).join(' ').gsub(/\s,/,',')
end
end
我面临的问题是正在检查唯一性和长度是否大于 3,但是由于 HTML 标签,例如很容易创建重复项。
删除标签后的重复示例:
"<p><span style=\"color: #1d3d70; font-family: -apple-system, system-ui, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; background-color: #ffffff;\">Testing 8449</span></p>"
和这个:
"<p>Testing 8449</p>"
删除 HTML 标签后,两者都应该具有相同的值,例如,我想防止这种重复。
解决方案
我最终将 html 标记剥离为值。我从我想检查的列的数据库中获得了一个集合,以查看它是否是唯一的并从那里剥离 html 标签。我使用该值来查看数据库中的集合是否包含该值。我无法弄清楚如何在数据库查询期间剥离标签。
class Task < ActiveRecord::Base
validate :check_duplicates
private
def check_duplicates
strip_txt = ActionController::Base.helpers.strip_tags(text)
errors.add(
:text,
'Text already stored. Text must be unique'
) if (
Task.select('text')
.pluck(:text)
.collect{|e|ActionController::Base.helpers.strip_tags(e)}.include? strip_txt)
end
end
推荐阅读
- android - Android:更改复选框颜色(框背景和刻度线颜色)
- react-native - 反应原生元素 - 为 listItem 中的徽章背景颜色应用条件样式
- node.js - Angular CLI ng 新错误 EEXIST:文件已存在 Windows 10
- database - SQLSTATE[HY000] [2002] 由于目标机器主动拒绝,无法建立连接。(SQL: select * from `gallery` where `status` = 1)
- sed - 如何检查sed中输入的是数字还是字母
- django - 如何在 swagger drf_yasg(维护 CSRF)中禁用/删除授权按钮 - django
- python - 为什么我的默认 PATH 中有一些 /Library/Frameworks/Python.framework/Versions/XX/bin?
- stata - 从多重估计导出 estat icc 表从 Stata 到 LaTeX
- php - 联系表格 7 不发送表格
- java - 我可以使用扫描仪方法将 .txt 拆分为 emptyLine 吗?