Я отлаживаю несущую волну. Это весело. Я думаю, что проблема сводится к следующему:Regex весело. Почему это регулярное выражение не соответствует моей строке?
Внутри carrierwave_direct, есть этот код:
if record.new_record? && record.send("has_#{attribute}_upload?") && record.key !~ record.send(attribute).key_regexp
Код #key_regexp это:
/\A#{store_dir}\/[a-f\d\-]+\/.+\.(?i)#{extension_regexp}(?-i)\z/
, который вычисляет это, когда я отладки:
record.send(attribute).key_regexp
/\Astories\/\/main_images\/[a-f\d\-]+\/.+\.(?i)(jpg|jpeg|gif|png)(?-i)\z/
Мой store_dir это:
"истории/# {model.id}/main_images"
, и я думаю, есть раздел пустой "/", потому что model.id равна нулю.
record.key это:
"/stories/main_imagescache/20160319-1549-2202-5826/blueapronimage.jpg"
Почему не в настоящее время он соответствует?
Похоже, что регулярное выражение имеет дополнительную косую черту, и я не уверен, что этот раздел:
[a-f\d\-]+\/.+\.(?i)(jpg|jpeg|gif|png)(?-i)
Является ли это любое количество букв между аф, цифры, или «-», а затем "/", затем любое количество букв или цифр, затем«. »....
Что такое (? i)?
Что такое группы захвата?
Что такое (? -i)?
Я думаю, что это проблема:
record.key !~ /\Astories/
true
Это должно быть ложным.
Поместите свой RegEx в [RegExr] (http://regexr.com/) или [Regex101] (https://regex101.com). /). Затем вы можете нависнуть над частями, и он точно скажет вам, что он делает. Оба они также имеют раздел * Объяснение *, объясняющий RegEx для вас. – Druzion