CanCanが能力とどのように連携するかをよりよく理解できるように、フィードバックを取得したい4つのシナリオがあります。
1-モデルをCanCanに渡すために許容できる反復からのオブジェクトを使用しています。うまくいくようです。これは、渡されたオブジェクトから非常に特定の能力を定義するようです。
@users.each do |user|
link_to user.name, user_path(user) if can? :edit, user
2-@userは、コントローラーで設定される変数ではありません。load_and_authorize_resourceが@userインスタンスを作成するため、これは#1と同じだと思います。
@users.each do |user|
link_to user.name, user_path(user) if can? :edit, @user
ただし、現在のモデルに関連せず、コントローラーで意図的に設定されていないビューにインスタンス変数が存在する場合はどうでしょうか。たとえば、@ accountインスタンスがshowアクションで設定されていない場合の、showuserページ内の次のようになります。CanCanは、@ accountが何であるかさえ知らないはずなのに、どのように使用できますか?
link_to "view user account", account_path(1) if can? :read, @account
3-モデルを使用して能力を定義するのはどうですか?これは非常に幅広い「ユーザーを編集できる」機能だと思います...いつこれを使用しますか?
@users.each do |user|
link_to user.name, user_path(user) if can? :edit, User
4-関連付けを使用します。ページを壊さない...しかし、それが期待どおりに機能しているかどうかはわかりません。
@users.each do |user|
link_to "view user account", account_path(1) if can? :read, user.account