我有2个表:帖子和用户(他们的关系是多对多),用户有很多favorite_posts(使用FavoritePost表(它由user_id和post_id组成)。
所以,我有一条路线:
get' favorite_posts',to:' favorite_posts #index'
(用户/:USER_ID / favorite_posts)
在我的能力.rb:
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
if user.new_record?
can :read, [Post]
else
can :read, [Post]
can :manage, [Post], owner_id: user.id
can :manage, [FavoritePost], user_id: user.id
end
end
end
在我的控制器中(favorite_posts_controller.rb):
class FavoritePostsController < ApplicationController
load_and_authorize_resource through: :current_user
def index
@favorite_posts = User.find(params[:user_id]).favorite_posts
end
所以,我需要通过ability.rb阻止重定向到其他用户最喜欢帖子的页面。我需要做什么?
答案 0 :(得分:0)
从CanCan维护者那里看一下这个quote:
CanCan可以回答用户是否可以做的问题 什么,但应用程序从那里做的是非常具体的上下文 而且我认为它不适合
ability.rb
文件。
如果您不想让其他用户查看当前用户最喜欢的帖子,最好将其放在 favorite_posts_controller <的before_action
过滤器中/强>:
class FavoritePostsController < ApplicationController
load_and_authorize_resource through: :current_user
before_action :correct_user, only: [:index] # add any other actions you want
def index
@favorite_posts = current_user.favorite_posts.all
end
private
def correct_user
user = User.find(params[:user_id])
redirect_to root_url unless current_user && current_user == user
end
end