gpt4 book ai didi

ruby - MongoMapper 自定义验证

转载 作者:数据小太阳 更新时间:2023-10-29 08:34:24 26 4
gpt4 key购买 nike

我有一个带有链接数组的 ruby​​ 类。现在我可以保存一个 Paper 对象,即使该数组包含不是有效 url 的链接。我有一个遍历数组并验证 url 并在 url 无效时返回 false 的方法。但是我想在尝试调用 Paper.save 时收到一条错误消息。这可能吗?

class Paper
include MongoMapper::Document

key :links, Array

validates_presence_of :links

def validate_urls
reg = /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$/ix
status = []
links.each do |link|
if link.match(reg)
status.push('true')
else
if "http://#{link}".match(reg)
status.push('true')
else
status.push('false')
end
end
end
if status.include?('false')
return false
else
return true
end
end

end

最佳答案

如果您使用来自 GitHub 的 MongoMapper(支持 ActiveModel),请参阅 http://api.rubyonrails.org/classes/ActiveModel/Validations/ClassMethods.html#method-i-validate

class Paper
include MongoMapper::Document

key :links, Array

validates_presence_of :links
validate :validate_urls

def validate_urls
reg = /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$/ix
status = []
links.each do |link|
if link.match(reg)
status.push('true')
else
if "http://#{link}".match(reg)
status.push('true')
else
status.push('false')
end
end
end
if status.include?('false')

# add errors to make the save fail
errors.add :links, 'must all be valid urls'

end
end

end

不确定该代码是否适用于 0.8.6 gem,但它可能。

此外,它不适用于这种情况,但如果它不是数组,您可以将其全部粉碎成一行:

key :link, String, :format => /your regex here/

关于ruby - MongoMapper 自定义验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5610819/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com