我有一个班级链接。该类具有这些属性
我想写一个验证,确保用户在文本框中插入一个以http或https开头的链接。
验证有效,但是当用户根本没有插入链接时我遇到了问题。它仍尝试对空属性运行验证并引发错误。下面的代码是我尝试检查空属性。
这是我的验证:
class Links < ActiveRecord::Base
attr_accessible :facebook, :twitter, :quora, :pinterest
validate :formatted_link
def formatted_link
links = %w(facebook twitter pinterest quora)
if links.any? {|link| self[link].nil?}
#Don't want it to do any validation if column is nil.
#Would like to drop column if user doesn't add a link.
else
validates_format_of links, :with => URI::regexp(%w(http https))
errors.add(:base, "Your link must start with http or https.")
end
end
原因:
如果用户只提交“www.twitter.com/username”,则会将url get附加到我的网站url“mydomain.com/page/www.twitter.com/username。不确定为什么会发生这种情况。如果有我可以做的其他事情来防止这个或我想念的东西请告诉我。
感谢。
答案 0 :(得分:1)
我认为您需要先将links
转换为符号,然后再将其传递给validates_format_of
,但由于它似乎对您有用,我可能错了,或者上面的示例代码可能会丢失细节。
无论哪种方式,您都可以跳过空白验证:
validates_format_of :foo, with: some_format, allow_blank: true
答案 1 :(得分:0)
我认为你试图以迂回的方式做conditional validation。既然你真的只想允许空白,你就可以这样做:
class Link < ActiveRecord::Base
Networks = [:facebook, :twitter, :quora, :pinterest]
attr_accessible *Networks
validates_format_of *Networks, :with => URI::regexp(%w(http https)), :allow_blank => true
end