私は学習のためのシステムを作っています。Rails 5 with CanCanCan - インデックスアクションのリストをフィルタリングする方法
このシステムは、ユーザーの病院の移動を制御します。ユーザーは自分のシフトだけを見てください。
私はCanCanCanを認証制御に使用しています。インデックス・ページに対するので
私が持っているコントローラのアクション:
class Ability
include CanCan::Ability
def initialize(user)
if user
can :manage, Shift, user_id: user.id
end
end
end
私は:私が持っている能力で
class UsersController < ApplicationController
def index
@users = User.all
end
end
index.html.erbで
<% @shifts.each do |shift| %>
<% if can? :read, shift %>
<tr>
<td><%= shift.date %></td>
</tr>
<% end %>
<% end %>
ユーザーにシフトがない場合にメッセージを表示したい
しかし、リストが空ではないがシフトがない場合、現在のユーザは@shiftで空のメソッドを直接使用することができないので、インデックスhtmlページのcanメソッドを使用します。
ユーザコントローラのインデックスアクションでリストをフィルタリングできますか?
'cancancan'はあなたのためのデータベースレコードをロードします。たとえば、インデックスアクションがある場合、cancancanは '@shifts = Shift.accessible_by(current_ability)'のようなことをします。この機能に関するドキュメントへのリンクは次のとおりです:https://github.com/CanCanCommunity/cancancan/wiki/authorizing-controller-actions –