rails 4自定义验证方法

时间:2014-04-09 22:16:18

标签: ruby-on-rails validation activerecord ruby-on-rails-4

我正在尝试编写一个简单的验证来检查用户的域名是否有效。这是模型:

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以使此自定义验证方法有效?

2 个答案:

答案 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