2016-12-10 4 views
0

誰もが.htmlページでcancanを使用することをお勧めしますか?私は、現在設定しているかについて少しだけ情報Ruby on Railsのindex.html.erbにcancancanを実装する最もクリーンな方法は何ですか?

... マイ/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を使用していますが、私は記事のモデルを設定。

私は、だから私のindex.html.erbに私のarticles_controller.rb

でload_and_authorize_resourceメソッドを使用しています。

私は自分のページにいくつかのCRUDオプションを持っています。私は、編集や削除などのいくつかのリンクとオプションを管理ユーザに見せたいだけです。

私のindex.html.erbの1つの部分では、私はこのリンクを管理者だけが見ることができます。

<% 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を使用してこれを簡略化する方法は ですか?そうすれば、私のセクションをたくさん繰り返す必要はありません。

答えて

0

私はdeviseの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> 
関連する問題