Ruby on rails 共享视图的CanCan
我正在使用cancan进行授权。我有一个需要授权的共享视图,这取决于它是哪个控制器 问题是: 我共享了部分(description.rhtml),它被两种不同的型号(产品和订单)使用。所以当有人去 www.example.com/product/1-说明部分显示产品说明 www.example.com/order/1-说明部分显示有关订单的说明 此“说明”部分上有“编辑”按钮,因此用户可以对其进行编辑,但条件是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页时,订单的所有者 我的能力等级考试 用户是
- 在产品/1页或
- 当用户位于订单/1页时,订单的所有者
- 用户是否为所有者-取决于产品或订单控制器
然而,在我们看来:
if (can? :update, @orders) || (can? :update, @product) < hide edit button > end
但如果可以的话更新,@orders返回true或false,它仅根据该条件显示或隐藏编辑按钮if(can?:更新,@orders)| |(can?:更新,@product) <隐藏编辑按钮> 结束
希望我说的很清楚。我认为您不应该在产品和订单中使用完全相同的部分 您可能需要使用布局: 视图/布局/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,所以它不会计算第二个条件。。。。谢谢你的指点