康康和会员资源的自定义路线

时间:2014-12-09 06:52:10

标签: ruby-on-rails ruby routes cancan

我的路线看起来很像:

的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给了我拒绝访问权限的错误。如果我通过同一个控制器进行路由,为什么网址是什么呢?

1 个答案:

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