前提・実現したいこと
Ruby 2.4.5
Rails 4.2.8
Gem: devise, friendly_url
https://サイト名/users/:id
の:idをユニーク制限(被らない)ランダム文字列にしようとしています。
また、friendly_urlを使っており、ユーザーが編集画面で自分の好きなURLを設定できるようにしています。
ただ、その前にユーザー登録時にランダム文字列を自動的に付与しデフォルトのURLにしたいと考えています。
(users/:idだと1から連番になり推測されやすいため)
Userモデル内で、新規ユーザー登録時に、カラムfrienly_urlにランダムな文字列を挿入しています。
しかし、friendly_urlは、ユーザー登録後、ユーザー自身で変更できるので、重複しないようチェックをかけ、重複していた場合は再帰的に呼び出し再作成するようにしたいです。
該当のソースコード
User.rb
ruby
1class User < ActiveRecord::Base 2 before_create :generate_url 3 4(省略) 5#friendly_url 6 include FriendlyId 7 friendly_id :friendly_url, :use => [:finders] 8 9 validates :friendly_url, length: { in: 3..20 }, 10 uniqueness: true, #一意性 11 format: { with: /\A[\w@-]*[A-Za-z][\w@-]*\z/ }, 12 # on: :friendly_url_user #登録時に入力必要なし 13 allow_nil: true #無入力許可 14 15 #ユーザー登録時のfriendly_id自動生成 16 def generate_url 17 if friendly_url.nil? 18 self.friendly_url = SecureRandom.hex(10) 19 self.save 20 #ここで、ランダムに作成したfriendly_urlが既に存在する場合、再帰的に呼び出してもう一度関数実行したい 21 end 22 end 23end
試したこと
再帰的な関数を色々調べたのですが分からず詰まってしまっています。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/15 05:45
2019/07/15 06:16
2019/07/15 07:11
2019/07/15 07:53
2019/07/15 07:58
2019/07/15 07:59
2019/07/15 08:05
2019/07/15 08:11
2019/07/15 08:39
2019/07/15 08:42
2019/07/15 09:13