我继续遇到此错误,要求GET请求显示操作。
1) ShopController GET 'show' should be successful
Failure/Error: get 'show', :id=>@shop.user.nickname
ActionController::RoutingError:
No route matches {:id=>"picardo", :controller=>"shop", :action=>"show"}
# ./spec/controllers/shop_controller_spec.rb:8:in `block (3 levels) in <top (required)>'
我的路线看起来像这样。
#routes.rb
resources :shop, :only=>[:show]
这是控制器规范:
#shop_controller_spec.rb
before(:each) do
@shop = Fabricate(:shop)
end
describe "GET 'show'" do
it "should be successful" do
get 'show', :id=>@shop.user.nickname
response.should be_success
end
end
和控制器:
def show
@user = User.find(:first,:conditions=>{:nickname=>params[:id]})
@shop = @user.shop
end
答案 0 :(得分:0)
你必须遵循一些铁路规则。
如果你有一个单一的资源,你必须写resource :shop
,如果你有多个资源,你必须写resources :shops
。您可以运行rake routes
命令来查看差异。
您写了resources :shop
并请求发送到您的应用程序中不存在的ShopController
,因为我确信该控制器名为ShopsController
。因为另一个rails规则是以复数形式命名控制器,并以单数形式命名模型。
或者只是在路线中写一个控制器名称:resources :shop, :controller => 'shops'