Ruby on rails 共享视图的CanCan

Ruby on rails 共享视图的CanCan,ruby-on-rails,ruby-on-rails-3,cancan,Ruby On Rails,Ruby On Rails 3,Cancan,我正在使用cancan进行授权。我有一个需要授权的共享视图,这取决于它是哪个控制器 问题是: 我共享了部分(description.rhtml),它被两种不同的型号(产品和订单)使用。所以当有人去 www.example.com/product/1-说明部分显示产品说明 www.example.com/order/1-说明部分显示有关订单的说明 此“说明”部分上有“编辑”按钮,因此用户可以对其进行编辑,但条件是 在产品/1页或 当用户位于订单/1页时,订单的所有者 我的能力等级考试 用户是

我正在使用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
    
    if(can?:更新,@orders)| |(can?:更新,@product)
    <隐藏编辑按钮>
    结束
    
    但如果可以的话更新,@orders返回true或false,它仅根据该条件显示或隐藏编辑按钮

所以我的问题是如何利用CanCan来解决这个问题


希望我说的很清楚。

我认为您不应该在产品和订单中使用完全相同的部分

您可能需要使用布局:

视图/布局/description.html.erb

<div class="description">
    <%= model.description %>
    <!-- other common code... -->
    <div class="actions">
        <%= yield %>
    </div>
</div>
<%= render :layout => "layouts/description", :locals => { :model => @order } do %>
    <%= if (can? :update, @order) %>
       your link
    <% end %>
<%= end %>

views/orders/description.html.erb

<div class="description">
    <%= model.description %>
    <!-- other common code... -->
    <div class="actions">
        <%= yield %>
    </div>
</div>
<%= render :layout => "layouts/description", :locals => { :model => @order } do %>
    <%= if (can? :update, @order) %>
       your link
    <% end %>
<%= end %>
“布局/描述”,:locals=>{:model=>@order}do%>
你的链接
你不必这样做,但我认为这比在同一部分中处理多个模型更干净


旁注:

但如果可以的话:更新,@orders返回true或false,仅根据该条件显示或隐藏编辑按钮


我真的不明白。如果@orders为空,那么可以吗?将返回false,整个表达式的结果将是
(can?:update,@product)
的结果,我认为这正是您想要的。

此外,请回顾您以前的问题并标记正确的答案。43%是不可接受的比率。很抱歉不清楚……问题是,我们如何使用cancan来处理两个或更多人共享的视图(部分)controller@jesse-你是说我把43%的答案标记为不可接受吗?@Viral-我是说你只接受了43%的问题的答案。这应该是100%。@Jesse我问了12个问题,其中5个没有回答,1个我已经回答,其余的我已经接受了mark的回答,所以总共43%…我希望这不会阻止你回答我的问题谢谢robiin的回答,…是的<代码>但是如果可以的话?:更新,@orders返回true或false,它仅根据该条件显示或隐藏编辑按钮我想你是对的…让我检查一下我的代码…我想我返回false,所以它不会计算第二个条件。。。。谢谢你的指点