1. Как правильно проверить URL фотографии?
Вы можете использовать плагин, который проверяет формат URL или написать его самостоятельно:
validates_each :photo_url do |record, attr, value|
begin
uri = URI::parse(value)
record.errors.add(nil, 'Sorry, you may only use http/https links') if (uri.class.to_s =~ /URI::HTTPS?/).nil?
record.errors.add(nil, 'The url must point to a picture') unless value =~ /\.(png|jpg|jpeg)$/i
rescue URI::InvalidURIError
record.errors.add(nil, 'The format of the url is not valid')
end
end
2. Проблемы с безопасностью? XSS?
Нет никаких проблем с безопасностью, если вы избегаете текста.
<%=h image_tag obj.photo_url %>
безопасно.
Помните, что пользователь все еще может использовать изображение размером 100 МБ, которое замедлит каждого посетителя.
3. Может быть, есть бесплатные магазины активов с API?
Я не знаю ничего, кроме облачного пространства, хостинг amazon s3 довольно дешевый.
Некоторые плагины для загрузки изображений поддерживают эти два, так что вы хотя бы сэкономите время.