Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在模型中正确设置此验证?_Ruby On Rails_Ruby_Ruby On Rails 3_Validation - Fatal编程技术网

Ruby on rails 如何在模型中正确设置此验证?

Ruby on rails 如何在模型中正确设置此验证?,ruby-on-rails,ruby,ruby-on-rails-3,validation,Ruby On Rails,Ruby,Ruby On Rails 3,Validation,验证字符串格式时,我将执行以下操作: validates :link, :uniqueness => true, :format => { :with => (regular expression) } 我希望链接是此正则表达式的youtube视频: /^http:\/\/www.youtube\.com\/watch\?v=([a-zA-Z0-9\-]*)/ 或vimeo视频: /^http:\/\/www.vimeo\.com\/(\d+)/

验证字符串格式时,我将执行以下操作:

validates :link, :uniqueness => true,
               :format => { :with => (regular expression) }
我希望链接是此正则表达式的youtube视频:

/^http:\/\/www.youtube\.com\/watch\?v=([a-zA-Z0-9\-]*)/

或vimeo视频:

/^http:\/\/www.vimeo\.com\/(\d+)/


如何在我的模型中设置此验证?

您可以将这两个正则表达式组合成一个正则表达式,但我假定您的意思是有两个不同的表达式,而不是两个相同的表达式:

validates :link,
  :uniqueness => true,
  :format => {
    :with => %r[http://(?:www\.youtube\.com/watch\?v=(\w+)|www\.vimeo\.com...)]
  }
使用
%r[…]
而不是
/…/
可以避免所有斜杠

另外请注意,YouTube可能会使用一个
youtu.be
域,因此您可能需要正则表达式的另一部分。如果这件事完全失控,您可能需要采取不同的方法,并将其与一个regexp列表进行比较:

VALID_URLS = [
  %r[http://www\.youtube\.com/watch\?v=(\w+)],
  %r[http://www\.youtu\.be/(\w+)],
  %r[ ... ]
]
然后验证如下内容:

validates :link,
  :uniqueness => true,
  :format => {
    :with => Regexp.new(VALID_URLS.join('|'))
  }

您可以将这两个正则表达式组合为一个,但我认为您的意思是有两个不同的表达式,而不是两个相同的表达式:

validates :link,
  :uniqueness => true,
  :format => {
    :with => %r[http://(?:www\.youtube\.com/watch\?v=(\w+)|www\.vimeo\.com...)]
  }
使用
%r[…]
而不是
/…/
可以避免所有斜杠

另外请注意,YouTube可能会使用一个
youtu.be
域,因此您可能需要正则表达式的另一部分。如果这件事完全失控,您可能需要采取不同的方法,并将其与一个regexp列表进行比较:

VALID_URLS = [
  %r[http://www\.youtube\.com/watch\?v=(\w+)],
  %r[http://www\.youtu\.be/(\w+)],
  %r[ ... ]
]
然后验证如下内容:

validates :link,
  :uniqueness => true,
  :format => {
    :with => Regexp.new(VALID_URLS.join('|'))
  }

除了
v
,youtube视频还能有不同的参数吗?我认为
v
是相当标准的,但你必须进行实验才能确定。除了较短的参数和其他随机参数外,这就是我所期望的。除了
v
,youtube视频还能有不同的参数吗?我认为
v
是相当标准的,但你必须进行实验才能确定。除了简短的,和其他随机参数,这就是我所期望的。