2013-02-25 3 views
4

Ruby on Rails를 배우기 위해 웹 앱을 만들고 있습니다. 이 앱을 사용하면 사용자가 캔버스에 로그인하고 그림을 그릴 수 있습니다. 사용자가 아트 워크 번호에 고유하게 생성 된 URL을 통해 걸작을 공유 할 수 있기를 바랍니다. 작품 제작자는 URL을 비밀번호로 보호 할 수있는 옵션도 제공해야합니다. 나는 Facebook이나 LinkedIn, twitter 등에서 URL을 공유 할 필요가 없습니다. 전자 메일이나 문자 메시지로 보낼 수있는 일반 URL 만 있으면됩니다.레일 앱에서 고유 URL 공유를 처리하려면 어떻게해야합니까?

어떻게 구현해야합니까? 이 기능을 쉽게 사용할 수있는 보석이 있습니까? 어떤 디자인 조언 및 지혜도 크게 감사하겠습니다. 고맙습니다!

답변

3

걸작 모델에 public이라고하는 부울을 사용할 수 있습니다. 사진이 공개이면 다른 사람이 볼 수 있습니다. 그러나 공개되지 않은 경우 반환 URL을 사용하면 아무 것도 처리하지 않습니다.

공개 URL은 해시를 통해 만들 수 있습니다. 나는 전형적으로 모델이 생성 될 때 생성 된 해쉬 토큰을 갖는 것을 좋아한다. 모델에서

rails g migration add_hash_token_to_masterpieces hash_token

, 당신은 무작위 진수로 hash_token 업데이트됩니다 taht를 private 메소드를 호출 할 before_create 방법을 사용할 수 있습니다. 당신의 루트 파일에 다음

before_create :generate_hash_token 

private 

    def generate_hash_token 
    begin 
     self.hash_token = SecureRandom.hex 
    end while self.class.exists?(hash_token: hash_token) 
    end 

, 당신은 그런 다음 컨트롤러는 토큰 당신의 해시의 발견 방법이 있고를 표시하기 위해 해당보기를 할 수 있습니다이

match "/public/:hash_token" => "masterpieces#public_masterpiece", as: "public"

처럼 뭔가를 할 수 공개 사용자를위한 이미지. 알림 _and_public은 공개 된 것만 찾습니다. 해시가 유효하더라도 걸작이 공개되지 않으면 레코드를 반환하지 않습니다.

def public_masterpiece 
    @masterpiece = Masterpiece.find_by_hash_token_and_public(params[:hash_token], true) 
    ... 
end 

그런 다음 당신의 걸작보기에, 특정 아직 사진을 볼 수 있습니다 여전히 인증 된 계정을 가지고 있지만하지 않는 사용자를위한 렌더링 public_masterpiece.html.erb라는 파일을 가질 수 있습니다. 승인을 위해 cancan과 같은 보석을 사용하는 경우 public_masterpiece 조치를 허용해야합니다.

+0

감사합니다. 그렇다면 정확히 어떤 URL을 공유 할 수 있습니까? 그리고 모든 고유 URL은 어디에 저장됩니까? – user2028025

+0

URL은 모델의 해시 토큰을 통해 동적으로 만들어집니다. URL은 HTTP : // site/public/hashtoken입니다. – kobaltz

관련 문제