12

私はRailsでこの(確かに恐ろしい)ルートを持っています:

スコープ '/software' do
  post '/:software_id/:attachment_id/event/*event' => 'software#post_event', as: 'post_event'
終わり

(私はそれを変更しますが、レガシー API の場合)

そして、私はそのための RSpec テストを書いています。

rake routes私に与えます:

post_event POST /software/:software_id/:attachment_id/event/*event(.:format) api/version1301/software#post_event

私のテストは次のようになります。

  "post_event" を記述する

    「204で応答する必要があります」
      パラメータ = {
        attachment_id: @attachment.uid,
        software_id: @license.id
      }

      投稿:post_event、params

      response.code.should eq "204"
    終わり
  終わり

しかし、次のルーティング エラーが発生します。

失敗/エラー: post :post_event, params
ActionController::RoutingError:
一致するルートがありませんd522-4a86-b0de-dfb8081e4465", :controller=>"api/version1301/software", :action=>"post_event"}
     # ./spec/controllers/api/version1301/software_controller_spec.rb:62:in `ブロック (4 レベル) in'

ワイルドカード (イベント) を使用してルートをどのように処理しますか?

4

1 に答える 1

17

(私自身の質問に答える)

これはちょっとした「新人」の間違いであることが判明しました。

ルートのワイルドカード (イベント) 部分には、引き続きパラメーターが必要です。「イベント」パラメーターを渡していなかったため、ルートは不完全でした。

次のコードが機能します。

「post_event」を記述する

  「204で応答する必要があります」
    パラメータ = {
      attachment_id: @attachment.uid,
      software_id: @license.id,
      イベント: 「いくつか/イベント」
    }

    投稿:post_event、params

    response.code.should eq "204"
  終わり
終わり

/*event(.:format)パラメータを期待していることを意味します。

自分自身と他の人への特記事項:

Rails でルーティング エラーが発生した場合は、すべてのパラメーターを渡していることを確認してください。

于 2013-04-18T00:03:21.923 に答える