2017-04-10 123 views
2

我有2个表格:帖子和用户(他们的关系是多对多),用户有很多favorite_posts(与FavoritePost表(它由user_id和post_id组成) 所以,我有路线:
获得 'favorite_posts',到: 'favorite_posts#指数' (用户/:USER_ID/favorite_posts) 在我ability.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

采取从惨惨维护者看看这个quote

惨惨能回答这个问题是否用户可以或不可以做 东西,但什么应用程序不会从有特定 非常上下文我不认为它适合ability.rb文件。

如果你不想让其他用户查看当前用户的喜爱帖子,最好把这个在​​before_action过滤器在您的favorite_posts_controller

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 
相关问题