提问人:morris menanya 提问时间:9/23/2023 最后编辑:mechnicovmorris menanya 更新时间:9/23/2023 访问量:53
检查两个字符串是否具有相似的字符
check if two strings have similar characters
问:
我有一个接受“first_name”的数据库模型,但我希望它接受单词名字的不同版本。用户可能会尝试通过选择以这种方式输入“名字”或“名字”来保存它(请注意它们之间的空格)。我希望它转换为“first_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
我认为这也很有帮助
评论
" first name ".strip.gsub(/\s+/,"_")
该方法删除前导和尾随空格,并且 GSUB 正则表达式将单词之间的任意数量的空格字符替换为单个下划线。这是你想要的吗?它符合您的问题,但与您的帖子标题不匹配!strip
FirSt name
first_name