やりたいこと
最近バックエンド側の開発では適切なバリデーションをかけることがとても重要なことがわかりました。
今回は規格以外のデータを保存できないようにするバリデーションに加えて、
データが規格以外だったらデータを規格に合うように修正して保存するバリデーションの作成の簡単に紹介したいと思います。
不具合事例
今回の案件としては、お客さんの入力した外部URLの先頭にhttp://
及びhttps://
がついてない場合、link_toメソッドだと、サービス内のPathになってしまいます。
わかりやすくローカル環境の例で説明します。
localhost:3000/posts
ページでlink_to "yahoo", "www.yahoo.com"
にすると
yahooのサイト
ではなくlocalhost:3000/posts/www.yahoo.com
に飛びます。
link_to "yahoo", "https://www.yahoo.com"
にすると、狙い通り、yahooのサイト
に飛びます。
解決方法
これを解決するために,保存しようとしているURLの先頭にhttp://
やhttps://
がついているかを確認し、
ついてなかったら付けて保存する必要がありますね。
下記のようにmodel/user.rb
にメソッドを定義してvaildate
にメソッド名
を入力することで、vaildate
として使うことができます。
class User < ApplicationRecord
validate :url_check
def url_check
url = self.url
if url
unless url.blank?
unless url.split(':')[0] == 'http' || url.split(':')[0] == 'https'
url = "http://" + url
end
end
end
end
とても簡単ですが、以上になります。