2016-08-12 12 views
1

ユーザーから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ですか?文字列 "dada"はfalseの代わりにtrueです。

答えて

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 
+0

素晴らしい、ありがとうございました! – Dudis

関連する問題