0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Rails]URLの先頭にhttp://をつけるカスタムバリデーション

Posted at

やりたいこと

最近バックエンド側の開発では適切なバリデーションをかけることがとても重要なことがわかりました。
今回は規格以外のデータを保存できないようにするバリデーションに加えて、
データが規格以外だったらデータを規格に合うように修正して保存するバリデーションの作成の簡単に紹介したいと思います。

不具合事例

今回の案件としては、お客さんの入力した外部URLの先頭にhttp://及びhttps://がついてない場合、link_toメソッドだと、サービス内のPathになってしまいます。
わかりやすくローカル環境の例で説明します。

localhost:3000/postsページでlink_to "yahoo", "www.yahoo.com"にすると
yahooのサイトではなくlocalhost:3000/posts/www.yahoo.comに飛びます。
image.png

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

とても簡単ですが、以上になります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?