我的路线看起来很像:
的routes.rb
resources :blog do
member do
get :dashboard, to: 'admin/postings#index'
end
resources :postings, only: [:index]
end
我使用cancan gem来限制访问博客页面,如下所示:
ability.rb
def initialize(user)
if user.has_role?(:blog_admin, :any)
can :access, Blog, id: user.blog.id
can :access, Posting, blog_id: user.blog.id
end
end
我遇到的问题是路径blog/:id/postings
工作得很好而且我可以访问它,但是blog/:id/dashboard
给了我拒绝访问权限的错误。如果我通过同一个控制器进行路由,为什么网址是什么呢?
答案 0 :(得分:0)
所以我能够弄明白。由仪表板的rails生成的路由看起来像这样,blog/:id/dashboard
,但为帖子生成的路由看起来像blog/:blog_id/postings
。所以在cancan中,can方法在结尾处接受条件哈希,它将检查params[:blog_id]
是否匹配user.blog.id
。这是问题所在。我要去的路线只有params[:id]
,而不是params[:blog_id]
。所以我只是通过从博客资源中删除仪表板路径并将其定义为:get '/blogs/:blog_id/dashboard', to: 'admin/postings#index'