2016-07-27 6 views
0

Also ich suche nach einer Möglichkeit, eine randomisierte ID zu erstellen, die mit einer Lobby verknüpft wird, die angezeigt wird, wenn die gezeigte Methode in Schienen aufgerufen wird. Im Moment würde die URL wie folgt aussehen: http://localhost:3000/lobby/2. Ich möchte diese 2 durch eine zufällig generierte ID ersetzen, damit Sie diesen Link an Freunde senden können, wenn Sie möchten, dass sie Ihrer Lobby beitreten. Irgendwelche Ideen?Wie können Sie die ID in der URL zufällig machen?

+0

Ich habe eine Idee, wie man das macht. Ich bin sehr gut zu Schienen –

Antwort

2

Sie sollten ein bisschen mehr Informationen teilen, wie Gavin sagte. Wenn Sie wissen, was Sie bereits ausprobiert haben, können wir Ihnen mehr/bessere Informationen zum weiteren Vorgehen geben.

Ich hoffe, dass dies Ihnen die richtige Richtung sendet. Für zufällige IDs zu erzeugen können Sie Secure verwenden: http://ruby-doc.org/stdlib-1.9.3/libdoc/securerandom/rdoc/SecureRandom.html

Ich würde empfehlen Sie eine weitere Spalte in die lobbies Tabelle hinzufügen, und machen es einzigartig:

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

nun in Ihrem Lobby Modell, wann immer Wenn es erstellt wird, können Sie ein eindeutiges Token generieren. Der Einfachheit halber kann man etwas in dieser Richtung tun:

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 

Dies wird eine secure_token jedes Mal, erzeugen ein Lobby erstellt wird. Jetzt in der Steuerung können Sie die secure_token anstelle der id verwenden, um Ihre Lobby zu finden. Zum Beispiel:

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

Heads-up, 'find_by_x' wird als Antipattern betrachtet. Die bevorzugte Lösung ist 'find_by (secure_token: )' –

+0

Guter Punkt, Kieran! –

+1

'SecureRandom :: Uuid' ist perfekt für diese Art von Sache. Stellen Sie sicher, dass Ihr System über ausreichende Entropie verfügt! –

0

Ich werde Ihnen nicht die ganze Antwort geben, da es großartig ist, diese Dinge zu lernen, aber wenn Sie irgendwelche Fragen haben, zögern Sie nicht mich zu fragen! Diese

ist, wo man beginnen soll: URLSafe Base 64

Here's a Railscasts episode, die weich von ähnlich ist, was Sie wollen, sehen, wenn Sie von dort erweitern! Wenn Sie neu bei Rails sind, sollten Sie Railscasts ausprobieren. Alle Pro-Episoden sind kostenlos auf youtube verfügbar!

+0

Vielen Dank! Ich bevorzuge es selbst zu lernen, ich wusste einfach nicht wo ich anfangen soll –

+0

Ich habe gerade den Beitrag aktualisiert. Sehen Sie, was Sie tun können! Wenn Sie Fragen haben, können Sie einen Chat über StackOverflow starten. –

Verwandte Themen