2016-07-27 5 views
0

私は、表示されたメソッドがレールで呼び出されたときに表示されるロビーにリンクするランダム化されたIDを作成する方法を探しています。今のところ、URLは次のようになります:http://localhost:3000/lobby/2。私はランダムに生成されたIDとその2を置き換えるために探していますので、あなたはそれらのロビーに参加したい場合は、友人にそのリンクを送信することができます。何か案は?URLのidをランダムにするにはどうすればよいですか?

+0

私はこれについてどうやって行くのか考えています。私は非常にレールを知っていた –

答えて

2

Gavinが言ったように、もう少し情報を共有する必要があります。あなたがすでに試したことを知ることは、進歩の方法に関するより多くの情報を提供するのに役立ちます。

これはあなたに正しい方向を送ることを望みます。あなたはたSecureRandomを使用することができ、ランダムなIDを生成するために: http://ruby-doc.org/stdlib-1.9.3/libdoc/securerandom/rdoc/SecureRandom.html

を私はあなたがlobbiesテーブルに別の列を追加することをおすすめします、そして、それはユニークなものにしたい:

add_column :lobbies, :secure_token, :string, null: false 
add_index :lobbies, :secure_token, unique: true 

、あなたのLobbyモデルで、いつでも作成されると、独自のトークンを生成できます。簡単にするために、あなたはこれらの線に沿って何かを行うことができます:

class Lobby < ActiveRecord::Base 
    before_create :generate_unique_secure_token 

    # Rest of the model's code 

    private 


    def generate_unique_secure_token 
    begin 
     self.secure_token = SecureRandom.urlsafe_base64 
    end while self.class.exists?(secure_token: secure_token) 
    end 
end 

これはsecure_tokenLobbyが作成されるたびに生成されます。今コントローラーでidの代わりにsecure_tokenを使用してLobbyを見つけることができます。たとえば、

class LobbiesController < ApplicationController 
    def show 
    @lobby = Lobby.find_by(secure_token: params[:id]) 
    end 
end 
+1

頭を上にして、 'find_by_x'は反パターンと見なされます。好ましい解決策は 'find_by(secure_token:)' –

+0

良い点、Kieran! –

+1

'SecureRandom :: uuid'はこのようなことに最適です。システムに十分なエントロピーがあることを確認してください! –

0

私はあなたにこれらのことを学ぶことは素晴らしいことですから、答えを全部あげませんが、質問があれば私に相談してください!

あなたが開始すべき場所です:URLSafe Base 64

Here's a Railscasts episodeあなたはそこから展開することができるかどうか、あなたが望むものに類似のソフトだと! Railsが初めての方はRailscastsをチェックしてください。すべてのプロエピソードはYouTubeで無料で入手できます!

+0

ありがとう!私は自分でそれを学ぶことを好む、私はちょうど始まるべきか分からなかった –

+0

私はちょうどポストを更新した。あなたができることを見てください!何かご不明な点がありましたら、StackOverflowからチャットを開始してください。 –

関連する問題