我在我的应用中使用设计和cancan。两者都有效。
我有一个User
模型,我刚刚添加了(使用脚手架)一个名为Purchase
的新模型。
在添加购买模型之前,我还有一个仪表板控制器(目前只显示一个页面dashboard#show
),是登录{{}后加载的页面{1}}
当用户未登录时,我可以访问localhost:3000/dashboard
。但是当用户登录时我不能。我可以访问localhost:3000/purchases
但不能访问purchase/1
。
知道这里发生了什么吗?它给我的错误是
“没有路线匹配{:action =>”show“,:controller =>”dashboard“}”
信息中心控制器
/purchases
的routes.rb
class DashboardController < ApplicationController
def show
@user = User.find(params[:id])
authorize! :read, @user
end
end
Rake Route
App::Application.routes.draw do
root :to => 'static_pages#index'
match '/about', :to => 'static_pages#about'
match '/error', :to => 'static_pages#error'
devise_for :users
resources :users
resources :dashboard
resource :visitors, :only => :create # POST to visitor_path to create a visitor
resources :purchases
答案 0 :(得分:0)
由于Dashboard是一个独特的资源,您需要将其设置为:
resource :dashboard
这是资源单数。
我的猜测是,在已登录用户的购买页面上,您有类似link_to "Dashboard", dashboard_path
的内容,但无论如何使用资源设置,show动作始终会获得ID。由于您没有提供,因此会出现路由异常。
您可以在此处找到有关奇异资源的信息:http://guides.rubyonrails.org/routing.html#singular-resources
答案 1 :(得分:0)
单数必须为resource
,否则为resources
resource :dashboard
resource :visitor, :only => :create
或
resources :dashboards
取决于任务是什么