1

我正在尝试为我的store.website. 我希望该方法检查网站字段是否以http://or开头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吗?

4

3 回答 3

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

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

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

def website_has_correct_format
  errors.add(:website, "Wrong website") unless website.downcase.start_with?('https://', 'http://')
end
于 2012-05-28T18:24:38.113 回答
1

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

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

于 2012-05-28T18:24:23.180 回答
1

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

def website_has_correct_format
  errors.add(:website, 'Wrong website') unless website =~ %r{\Ahttps?://}
end
于 2012-05-28T18:27:32.593 回答