3

コントローラーの 1 つでカスタム アクションの要求仕様を作成しようとしています。

私のroutes.rbは次のようなものです:

resources :cars do
  member do
    get :search
  end
end

私の cars_controller.rb は次のようなものです:

class CarsController < ApplicationController
  def search
    # pending 
  end
end

私の controller_cars_spec.rb は次のようなものです:

describe CarsController do
  describe 'Search' do
    it 'should call the model method that perform search by brand' do
      get :search
    end  
  end
end

レーキ ルートには次のように書かれています。

search_car GET    /cars/:id/search(.:format) {:action=>"search", :controller=>"cars"}

そして自動テストは言う:

Failures:
1) CarsController Search should call the model method that perform search by brand
   Failure/Error: get :search
   ActionController::RoutingError:
     No route matches {:controller=>"cars", :action=>"search"}
   # ./spec/controllers/cars_controller_spec.rb:19:in `block (3 levels) in <top (required)>'

どうしたの?この失敗が解けない…

4

4 に答える 4

1

この投稿に見られるように、仕様ファイルのルートに :id パラメータを渡す必要があります: "ルートが一致しません" エラー?

get :search, :id => @car.id
于 2013-02-12T02:26:26.540 に答える
1

要するに、これはあなたが望むことをするはずです:

get :search, :car_id => @car.id

リソースを使用する場合、各パラメーターのルートを一致させる必要がありますが、それだけではありません。何かのようなもの:

get :search, :id => @car.id

動作するように見えますが、動作しません。

リソース ヘルパーを使用する場合、ID はサブルートとリソースのリソース名の前に付けることで名前空間化されます。rspec エラーが :car_id の欠落について文句を言わない理由は完全にはわかりません。おそらく、他の誰かが欠落している知識の部分を埋めることができます。

于 2015-04-01T15:52:48.333 に答える
0

memberは単一のリソース用であるため、:id が必要です。あなたがしたい:

resources :cars do
  collection do
    get :search
  end
end
于 2012-11-02T14:49:48.987 に答える
0

チェックする

resources :cars

前です

match '/cars/:id/search' => 'cars#search'
于 2013-08-22T09:28:03.807 に答える