2011-12-23 3 views
0

저는 cancan을 인증 용으로 사용하고 있습니다. 어떤 컨트롤러인지에 따라 권한이 필요한 공유보기가 있습니다.공유보기 용 CanCan

문제 : 나는 부분 (description.rhtml)을 공유했으며 두 개의 다른 모델 (제품 및 주문)에서 사용합니다. 어떤 하나

www.example.com/product/1에 갈 때 그래서 - 설명 섹션 순서

이 설명 섹션에 대한 설명을 보여줍니다 - 설명 섹션 제품 www.example.com/order/1에 대한 설명을 보여줍니다 사용자가 편집 할 수 있도록에서 편집 버튼을 가지고 있지만 상태는 사용자가 제품 제품/1 페이지 또는 주문의

  • 소유자에 사용자가 순서에/1 페이지의 소유자 여야합니다

    • 입니다 .

    사용자가 소유자 또는없는 경우

    • 에 대한 나의 능력 클래스 체크 - 그러나보기에 제품 또는 주문 컨트롤러 에 따라 :

      if (can? :update, @orders) || (can? :update, @product) 
      < hide edit button > 
      end 
      

      하지만 경우 캔? : 업데이트 @orders은

    그래서 제 질문은이 문제

    희망 나는 분명를 해결하기 위해 사용 캉캉을 만들 수있는 방법입니다 그것은 표시하거나 해당 조건에 따라 편집 버튼을 숨 깁니다, true 또는 false를 돌려줍니다.

  • +1

    무엇이 문제입니까? – kikito

    +1

    또한 이전 질문으로 돌아가서 정답을 표시하십시오. 43 %는 수용할만한 비율이 아닙니다. –

    +0

    미안하지만 .... 미안합니다. 질문은 두 개 이상의 컨트롤러가 공유하는보기 (부분)에 대해 cancan을 사용할 수있는 방법입니다. – Viral

    답변

    1

    제품 및 주문과 정확히 동일한 부분을 사용해서는 안됩니다.

    당신은 레이아웃을 사용할 수 있습니다

    뷰/레이아웃/description.html.erb

    <div class="description"> 
        <%= model.description %> 
        <!-- other common code... --> 
        <div class="actions"> 
         <%= yield %> 
        </div> 
    </div> 
    

    보기/주문/description.html.erb

    <%= render :layout => "layouts/description", :locals => { :model => @order } do %> 
        <%= if (can? :update, @order) %> 
         your link 
        <% end %> 
    <%= end %> 
    

    당신이 돈을 그럴 필요는 없지만 같은 부분에서 여러 모델을 다루는 것보다 더 깨끗하다고 ​​생각합니다.


    사이드 참고 :

    but if can? :update, @orders return true or false, it show or hides edit button depending on that condition only

    나는 정말 이해가 안 돼요. @orders가 null의 경우는 가능합니까? 거짓을 반환 할 것이고, 전체 식의 결과는 (can? :update, @product)의 결과 일 것입니다. 나는 이것이 당신이 원했던 것이라고 생각했습니다.

    +0

    고마워 robiin에 대한 응답, 그렇습니다.하지만 할 수 있다면? : update, @orders true 또는 false를 반환, 그 상태에 따라 편집 단추를 표시하거나 숨 깁니다. '나는 당신이 옳다 고 생각합니다. 내 코드를 확인하도록하겠습니다 ... 나는 false를 반환하므로 평가하지 않습니다. 두 번째 조건 .... 포인터 주셔서 감사합니다. – Viral