2011-02-08 3 views
1

갤러리를 볼 수있는 권한이있는 사용자 만 갤러리에 액세스 할 수 있습니다. 갤러리에는 사용 권한을 통해 많은 shared_users가 있으며 반대의 경우도 마찬가지입니다. 갤러리에는 소유자가 하나뿐입니다. 소유자와 공유 사용자는 모두 User 클래스입니다. 이 모든 것이 잘 작동합니다. 그러나 내가 가지고있는 문제는 내 액세스 필터 때문입니다. 사용자가 액세스하려고하는 갤러리를 볼 수있는 경우 내가 볼하려면 다음 코드를 사용하고레일 3의 before_filter 메소드에서 컨트롤러 메소드 속성 전달

는 :

def authenticate_viewers! 
    if user_signed_in? && current_user.can_view?(@gallery) 
    return true 
    end 
    redirect_to root_url, 
    :notice => "You must have permission to view this gallery." 
    return false  
end 

당신이 볼 수 있듯이, can_view? 내가 설정하고있어 그 @gallery 필요 show 메서드는 있지만 before_filter 메서드는 메서드가 실행되기 전에 해결되므로 메서드에서 설정된 특성에 액세스 할 수 없습니다. 무단 사용자가 갤러리를 보려고하지 않는 한 after_filter을 사용하십시오. 그렇다면 after_filter 페이지 렌더링을 허용 한 다음 리디렉션을 시도하기 때문에 DoubleRender 오류가 발생합니다.

아직 시도하지는 않았지만 아마도 params [: id] 대신 @gallery를 사용할 수 있다고 생각했는데 궁극적으로이 방법이 더 효율적일 수 있습니다 (객체 대신 정수 전달). 어쨌든 현재 코드를 작동시키는 방법이 있습니까? 또는 params 사용으로 전환하는 것이 나의 최대 관심사입니까?

답변

0

와우, 알았어. 내가하는 것처럼 일반적으로 문제를 해결하는 방법에 대한 브레인 스토밍을하기 때문에 여기에 질문을 작성하는 것이 도움이됩니다. @gallery 객체를 사용하는 대신에, 나는 단지 Gallery.find(params[:id])을 사용하고 모든 것이 매력처럼 작동합니다. 감사합니다. 모든 코드를 다시 작성할 필요는 없습니다.