目前我的导航部分如下所示。
- if (can? :manage, Invoice) and (can? :manage, InvoiceItem)
%li{class: is_active?(["invoices", "invoice_items"])}
= link_to invoices_path do
%i.icon-file-text
Invoices
我看到定义能力的can方法可以接受一个数组。有没有办法制作罐头?辅助方法更简洁?
更新:我已经写了一个小的应用程序助手来解决这个问题。这是最好的方式吗?
def user_can?(actions, resources)
actions.each do |action|
resources.each do |resource|
return false if cannot? action, resource
end
end
true
end
在部分:
- if user_can? [:manage], [Invoice, InvoiceItem]
%li{class: is_active?(["invoices", "invoice_items"])}
= link_to invoices_path do
%i.icon-file-text
Invoices
答案 0 :(得分:0)
can?
一次只评估一个操作和一个资源。您的帮助程序很好,假设您不需要检查操作和资源的不同组合,这些组合通常不在视图中的单个条件语句中执行。
在决定是否显示:manage
列表时,您可能还想考虑为什么确实需要检查InvoiceItem
Invoice
{{1}}访问权限。