阻止重定向到其他帖子页面

时间:2017-04-10 10:47:21

标签: ruby-on-rails ruby cancancan

我有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阻止重定向到其他用户最喜欢帖子的页面。我需要做什么?

1 个答案:

答案 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