我有一个文本表单来从用户那里获取URL。
控制器:
def create
link = Link.new(set_url_params)
if link.save
redirect...
else
flash[:notice] = "error"
end
end
在我的模型中,我有一个方法来添加http,如果给定的链接没有它:
before_validation :clean_link
def clean_link
self.url = "http://#{url}" unless self.url =~ /^https?:\/\//
end
现在我想验证网址响应(+重定向后获取最终链接)并保存或显示错误消息:
validate :response?
def response?
begin
self.url = HTTParty.head(self.url).request.last_uri.to_s
rescue SocketError
false
end
end
Example with valid URL:
input: cvcka.cz
clean_link: http://cvcka.cz
respond? https://cvcka.cz
link.valid? True
Invalid URL:
input: dada
clean_link: http://dada
respond?: rescue exception and return false
link.valid? - it returns true instead of false.
为什么link.valid?字符串“dada”是真的而不是假的吗?
答案 0 :(得分:1)
您需要在模型的错误中添加一个条目,以便模型的valid?
状态为false。
def response?
begin
self.url = HTTParty.head(self.url).request.last_uri.to_s
rescue SocketError
errors.add(:url, "Not a responsive URL")
return false
end
end