Недопустимо после спасательного исключения в модели
У меня есть текстовая форма для получения URL от пользователей.
контроллер:
def create
link = Link.new(set_url_params)
if link.save
redirect...
else
flash[:notice] = "error"
end
end
В моей модели у меня есть метод для добавления http, если у данной ссылки его нет:
before_validation :clean_link
def clean_link
self.url = "http://#{url}" unless self.url =~ /^https?:\/\//
end
Теперь я хотел бы проверить ответы URL (+ получить последнюю ссылку после перенаправления) и сохранить ее или показать сообщение об ошибке:
validate :response?
def response?
begin
self.url = HTTParty.head(self.url).request.last_uri.to_s
rescue SocketError
false
end
end
Example with valid URL:
input: cvcka.cz
clean_link: http://cvcka.cz
respond? https://cvcka.cz
link.valid? True
Invalid URL:
input: dada
clean_link: http://dada
respond?: rescue exception and return false
link.valid? - it returns true instead of false.
Почему link.valid? со строкой "дада" является верным, а не ложным?
1 ответ
Решение
Вам необходимо добавить запись в ошибки модели, чтобы модель valid?
состояние будет ложным.
def response?
begin
self.url = HTTParty.head(self.url).request.last_uri.to_s
rescue SocketError
errors.add(:url, "Not a responsive URL")
return false
end
end