将字段设置为必需并从验证"http://"开始



我正在尝试为我的store.website编写自定义验证。我希望该方法检查网站字段是以http://还是https://开头。这是我尝试过的:

class Store < ActiveRecord::Base
  validate :website_has_correct_format
  def website_has_correct_format
    self.website = self.website.downcase.start_with?(/https?:///, '')
  end
end

不过这行不通。出于某种奇怪的原因,它实际上只是将字母保存t.

正确的方法是什么?另外,我也可以给它:message吗?

  1. 不要修改验证器中的值;验证器应验证现有数据而不更改它。

  2. start_with?方法将普通String作为参数,而不是Regexp

因此,您可以像这样实现验证器:

def website_has_correct_format
  errors.add(:website, "Wrong website") unless website.downcase.start_with?('https://', 'http://')
end

start_with? 返回 truefalse --给定一个字符串参数。

您还将验证与设置值混为一谈 - 验证是或否;为什么要在验证方法中设置属性值?

您不应该在验证中修改模型中的数据,为此您有before_save操作。验证人应该看:

def website_has_correct_format
  errors.add(:website, 'Wrong website') unless website =~ %r{Ahttps?://}
end

最新更新