检查两个字符串是否具有相似的字符

check if two strings have similar characters

提问人:morris menanya 提问时间:9/23/2023 最后编辑:mechnicovmorris menanya 更新时间:9/23/2023 访问量:53

问:

我有一个接受“first_name”的数据库模型,但我希望它接受单词名字的不同版本。用户可能会尝试通过选择以这种方式输入“名字”或“名字”来保存它(请注意它们之间的空格)。我希望它转换为“first_name”,以便可以将其保存在模型中

Ruby-on-Rails 轨道-ActiveRecord

评论

0赞 Les Nightingill 9/23/2023
" first name ".strip.gsub(/\s+/,"_")该方法删除前导和尾随空格,并且 GSUB 正则表达式将单词之间的任意数量的空格字符替换为单个下划线。这是你想要的吗?它符合您的问题,但与您的帖子标题不匹配!strip
0赞 morris menanya 9/23/2023
这就是我想要的。你是正确的
0赞 mechnicov 9/23/2023
如果用户提交怎么办?和吗?FirSt namefirst_name

答:

1赞 mechnicov 9/23/2023 #1

在 Rails 7.1+ 中,你可以这样使用 ActiveRecord::Normalization::normalizes:

class User < ApplicationRecord
  normalizes :name, with: ->(name) { name.downcase.strip.gsub(/\s+/, "_") }
end

规范化在验证之前运行,默认情况下不适用(这就是它安全的原因)nil

它与持久性和查找器方法无缝协作

user = User.create(name: " first   name  ")
user.name # => "first_name"

user = User.find_by(name: " first   name  ")
user.name # => "first_name"

要使用 ActiveRecord::Normalization#normalize_attribute 规范化旧记录,请执行以下操作:

User.find_each do |user|
  user.normalize_attribute(:name)
  user.save! # solve constraints and validations issues manually
end

评论

0赞 morris menanya 9/25/2023
我认为这也很有帮助