ruby-on-rails 检查两个字符串是否有相似的字符

lvmkulzt  于 2023-10-21  发布在  Ruby
关注(0)|答案(1)|浏览(113)

我有一个接受“first_name”的数据库模型,但我希望它接受单词first name的不同版本。用户可能会尝试保存它,方法是选择输入“first name”或“first name“(注意它们之间的白色空格)。我希望它转换为“first_name”,以便它可以保存在模型中

h9a6wy2h

h9a6wy2h1#

在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

相关问题