2011-12-23 9 views
0

私はcancanを認可に使用しています。私はそれがどのコントローラであるかに応じて認可を必要とする共有ビューを持っています。共有ビューのCanCan

問題は: 私は部分(description.rhtml)を共有しており、2つの異なるモデル(製品と注文)で使用されています。いくつかのいずれかが

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の場合、できますか? falseを返すでしょう、そして、全体の表現の結果は、あなたが望んだと思った(can? :update, @product)の結果になります。

    +0

    ありがとうrobiinレスポンス、...ええ、もしできれば? :update、@ordersはtrueまたはfalseを返します。その条件に応じて編集ボタンを表示または非表示にします '私はあなたが正しいと思います...私のコードをチェックさせてください...私はfalseを返すので評価しません2番目の条件....ポインタのおかげで – Viral

    関連する問題