在Ruby on Rails中我的index.html.erb上实现cancancan的最简洁方法是什么?

时间:2016-12-10 20:12:30

标签: ruby-on-rails ruby

我只是想知道每个人都建议在他们的.html页面中使用cancan吗?

关于我目前设置的一些信息...... 我的/app/models/ability.rb:

 user ||= User.new # guest user (not logged in)
 if user.admin?
   can :manage, :all
 else
   can :read, :all
 end

我正在使用articles_controller.rb并设置了文章模型。

我在articles_controller.rb中使用了load_and_authorize_resource方法

所以我的index.html.erb。

我的页面上有一些CRUD选项,我只希望管理员用户可以看到一些链接和选项,例如编辑和删除。

在我的index.html.erb的一部分中,我有这个链接,只能由管理员查看。

<% if can? :create, @article %>
<%= link_to 'Post New Load Data!', new_article_path %>
<% end %>

^这对我想要的完美。

但是我的index.html上有另一个区域让我感到困惑。它是这样的......

<% if current_user && current_user.admin? %>
<table>
 <tr>
    <th>Title</th>
  </tr>

  <% @articles.each do |article| %>
   <tr>
     <td><%= article.title %></td>
     <td><%= link_to 'View', article_path(article) %> |</td>
     <td><%= link_to 'Edit', edit_article_path(article) %> |</td>
     <td><%= link_to 'Delete', article_path(article),
             method: :delete,
             data: { confirm: 'Are you sure?' } %></td>
   </tr>
  <% end %>
<p>
</table>
<% else %>
<table>
 <tr>
    <th>Title</th>
  </tr>
  <% @articles.each do |article| %>
   <tr>
     <td><%= article.title %></td>
     <td><%= link_to 'View', article_path(article) %> |</td>
   </tr>
  <% end %>
  </table>
  <% end %>

因此,它允许管理员查看“编辑”和“删除”选项。 这就是我想要的,但我没有使用CanCan来做到这一点。有没有 使用CanCan简化此操作的方法?这样我就不必重复了很多 我的部分。

1 个答案:

答案 0 :(得分:0)

我喜欢坚持使用设计的current_user.admin?因为它读得很好:

<table>
 <tr>
  <th>Title</th>
 </tr>

 <% @articles.each do |article| %>
  <tr>
   <td><%= article.title %></td>
   <td><%= link_to 'View', article_path(article) %> |</td>
   <% if current_user.admin? %>
    <td><%= link_to 'Edit', edit_article_path(article) %> |</td>
    <td><%= link_to 'Delete', article_path(article),
            method: :delete,
            data: { confirm: 'Are you sure?' } %></td>
   <% end %>
  </tr>
 <% end %>
</table>