2016-07-27 3 views
0

그래서 난 레일에 표시된 메서드를 호출 할 때 표시됩니다 로비에 연결됩니다 무작위 ID를 만드는 방법을 찾고 있어요. 현재 URL은 http://localhost:3000/lobby/2과 같습니다. 그 2를 무작위로 생성 된 ID로 대체하려고합니다. 그래서 당신이 로비에 가입하기를 원한다면 친구에게 그 링크를 보낼 수 있습니다. 어떤 아이디어?URL의 ID를 어떻게 임의로 만들 수 있습니까?

+0

이 문제를 해결하는 방법을 알고 있습니다. 나는 아주 잘 알고있다. –

답변

2

Gavin이 말한대로 좀 더 많은 정보를 공유해야합니다. 이미 시도한 것을 알고 있으면 진행 방법에 대한 정보를 더 많이/더 잘 얻을 수 있습니다.

나는 이것이 당신에게 올바른 방향을 알려주기를 바랍니다. 이 http://ruby-doc.org/stdlib-1.9.3/libdoc/securerandom/rdoc/SecureRandom.html

나는 당신이 lobbies 테이블에 다른 열을 추가 할 것을 권장하고 특별하게 만드는 것 : 당신의 Lobby 모델마다에,

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

이제 임의 ID를 생성하기 위해 당신은 SecureRandom의을 사용할 수 있습니다 그것이 생성되면 고유 한 토큰을 생성 할 수 있습니다. 단순화하기 위해, 당신은이 라인을 따라 뭔가를 할 수 있습니다

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

좋은 지적, 키 에런! –

+1

'SecureRandom :: uuid'는 이런 종류의 일에 완벽합니다. 시스템에 충분한 엔트로피가 있는지 확인하십시오! –

0

이런 것들을 배우는 것이 좋기 때문에 나는 전체 답을주지는 않겠지 만, 질문이 있으시면 언제든지 물어보십시오! 당신이 거기에서 확장 할 수 있다면 당신이 원하는 것과 유사한 소프트의 URLSafe Base 64

Here's a Railscasts episode은 다음을 참조하십시오 시작해야하는 위치

이입니다! 레일스를 처음 사용하는 경우 Railscasts를 확인하십시오. 모든 프로 에피소드는 YouTube에서 무료로 사용할 수 있습니다!

+0

고마워! 나는 그것을 배우기를 더 좋아한다, 나는 어디에서 시작 해야할지 몰랐다. –

+0

나는 방금 포스트를 업데이트했다. 당신이 할 수있는 것을보십시오! 질문이 있으시면 StackOverflow –

관련 문제