Вы можете объединить эти два регулярных выражения в одно, хотя я предполагаю, что вы имеете в виду два разных выражения вместо двух идентичных:
validates :link,
:uniqueness => true,
:format => {
:with => %r[http://(?:www\.youtube\.com/watch\?v=(\w+)|www\.vimeo\.com...)]
}
Использование %r[...]
вместо /.../
избавляет вас от необходимости избегать всех слэшей.
Также обратите внимание, что YouTube может использовать домен youtu.be
, поэтому вам может понадобиться еще одна часть вашего регулярного выражения. Если эта вещь полностью выходит из-под контроля, вы можете выбрать другой подход и получить список регулярных выражений, с которым вы сравниваете:
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('|'))
}