我有一个使用 Postgres 作为数据库的 Rails 应用程序。
Postrgres 不接受包含空字节的字符串(例如"a \u0000 b"
:)。尝试保存此类数据会导致以下错误:
ActiveRecord::StatementInvalid
PG::UntranslatableCharacter: ERROR: unsupported Unicode escape sequence
我想设置一条适用于我的所有 ActiveRecord 模型的规则,确保每个字符串属性在保存之前都会从中删除空字节。我正在考虑一些可能产生类似于以下示例的效果的东西:
class MyModel < ApplicationRecord
before_save :remove_null_bytes
private
def remove_null_bytes
my_field.delete!("\u0000")
end
end
但应用于每个模型的每个字符串属性,而不必强制重复设置。
我希望将其限制为 Active Record 字符串属性的原因是,该应用程序还处理二进制上传和电子邮件 webhook。这些可能包含合法的空字节,我不希望这些受到新规则的影响。