Недопустимо после спасательного исключения в модели

У меня есть текстовая форма для получения 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
Другие вопросы по тегам