我在PostGres 9.5中使用Rails 4.2.7。我的模型中有这个验证规则
validates :name, presence: true
这将调用Rails中的底层代码(来自.rvm / gems / ruby-2.3.0 / gems / activesupport-4.2.7.1 / lib / active_support / core_ext / object / blank.rb)...
class String
BLANK_RE = /\A[[:space:]]*\z/
…
def blank?
BLANK_RE === self
end
当我将模型的名称属性设置为
时"C\xE9dric Lanier”
然后在我的方法上调用#valid?
,我收到编码错误:
((ArgumentError)UTF-8中的无效字节序列)
如何在上面重写我的验证规则,以便它不使用底层正则表达式?请注意,此问题与解决编码错误无关。我为此开了另一个问题。
答案 0 :(得分:1)
validate :name_present
def name_present
if name.mb_chars.tidy_bytes.to_s.blank?
errors.add(:name, "can't be blank")
end
end
它基本上取代了奇怪的字符:
"C\xE9dric Lanier".mb_chars.tidy_bytes.to_s # => "Cédric Lanier"