【发布时间】:2014-04-30 17:35:10
【问题描述】:
我在 Rails 4 应用程序中使用自定义验证。它只是一个用户表单,应该提交用户的域名,然后对其进行验证以确保站点存在。
验证如下所示:
validates :first_name, :last_name, :domain, presence: true
validate :domain_check
如果域留空,它不会从第一个presence 验证返回验证错误,而是运行:domain_check 函数。好像第一次验证失败应该立即返回?
其次,当它执行:domain_check 函数时,我不确定如何检查domain 值——现在我这样做:
def domain_check
Rails.logger.debug '###############'
Rails.logger.debug domain.inspect # prints ""
Rails.logger.debug domain # prints nothing
Rails.logger.debug domain.nil? # prints nothing
Rails.logger.debug '###############'
if domain.nil?
errors.add(:domain, "Domain is required.")
return
end
if domain.strip.starts_with?('http://')
domain.gsub 'http://', ''
elsif domain.strip.starts_with?('https://')
domain.gsub 'https://', ''
end
uri = 'http://'+domain
response = open(uri).read
# more stuff here
提交的表单在
上返回undefined method "+" for nil:NilClass
uri = 'http://'+domain
线。我不明白这一点,因为我在尝试创建 uri 字符串之前检查了 domain 的值是否为零。
这是在 Ruby 2.0.0 下运行的——我相信这段代码在 Ruby 1.9.3 下可以正常工作——是这个原因吗?还是我遗漏了一些明显的东西?
谢谢!
【问题讨论】:
-
Rails.logger.debug domain.class打印什么? -
@UriAgassi--
Rails.logger.debug domain.classprintsString
标签: ruby-on-rails ruby ruby-on-rails-4