我有一个接受“first_name”的数据库模型,但我希望它接受单词first name的不同版本。用户可能会尝试保存它,方法是选择输入“first name”或“first name“(注意它们之间的白色空格)。我希望它转换为“first_name”,以便它可以保存在模型中
h9a6wy2h1#
在Rails 7.1+中,你可以这样使用ActiveRecord::Normalization::normalizes:
ActiveRecord::Normalization::normalizes
class User < ApplicationRecord normalizes :name, with: ->(name) { name.downcase.strip.gsub(/\s+/, "_") } end
规范化在验证之前运行,默认情况下不适用于nil(这就是为什么它是安全的)它可以无缝地与持久性和查找器方法一起工作
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规范化旧记录:
ActiveRecord::Normalization#normalize_attribute
User.find_each do |user| user.normalize_attribute(:name) user.save! # solve constraints and validations issues manually end
1条答案
按热度按时间h9a6wy2h1#
在Rails 7.1+中,你可以这样使用
ActiveRecord::Normalization::normalizes
:规范化在验证之前运行,默认情况下不适用于
nil
(这就是为什么它是安全的)它可以无缝地与持久性和查找器方法一起工作
使用
ActiveRecord::Normalization#normalize_attribute
规范化旧记录: