我正在尝试编写一个简单的验证来检查用户的域名是否有效。这是模型:
class User < ActiveRecord::Base
require 'net/http'
validate :domain_check
def domain_check
uri = URI(domain)
request = Net::HTTP.new uri.host
response = request.request_head uri.path
if response.code.to_i > 400
errors.add(:domain, "This doesn't appear to be an valid site.")
end
end
end
这是基于Rails如何here的示例。
然而,这会导致关于行
的错误bad argument (expected URI object or URI string)
uri = URI(domain)
我认为domain
变量没有进入函数 - 在Rails书的例子中它似乎很奇怪它没有传递任何变量,但是表单变量正在正确传递(I可以在调试信息中看到它们,并填充表单项domain
。
如何正确传递domain
var以使此自定义验证方法有效?
答案 0 :(得分:8)
您可以将功能更改为
class User < ActiveRecord::Base
require 'net/http'
validate :domain_check
def domain_check
uri = URI(domain)
request = Net::HTTP.get_response uri
if request.code.to_i > 400
errors.add(:domain, "This doesn't appear to be an valid site.")
end
end
end
答案 1 :(得分:1)
问题是(可以预见,我猜)强参数。我必须为Devise编写一个自定义参数清理程序,因此模型可以接受表单的域。
有关详情:https://github.com/plataformatec/devise#strong-parameters