12

我在 Rails 中有这条(诚然可怕的)路线:

范围'/软件'做
  发布 '/:software_id/:attachment_id/event/*event' => 'software#post_event',如:'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,
        软件ID:@license.id
      }

      发布:post_event,参数

      response.code.should eq "204"
    结尾
  结尾

但我收到以下路由错误:

失败/错误:发布:post_event,参数
动作控制器::路由错误:
没有路由匹配 {:format=>"json", :name_path=>:api, :attachment=>"7b40ab6a-d522-4a86-b0de-dfb8081e4465", :software_id=>"0000001", :attachment_id=>"7b40ab6a- d522-4a86-b0de-dfb8081e4465", :controller=>"api/version1301/software", :action=>"post_event"}
     # ./spec/controllers/api/version1301/software_controller_spec.rb:62:in `block (4 levels) in '

您如何使用通配符(事件)处理路由?

4

1 回答 1

17

(回答我自己的问题)

事实证明,这有点“新手”的错误。

路由的通配符(事件)部分仍然需要一个参数。我没有传递“事件”参数,因此路线不完整。

以下代码有效:

描述“post_event”做

  它“应该以 204 响应”
    参数 = {
      attachment_id:@attachment.uid,
      软件ID:@license.id,
      事件:'一些/事件'
    }

    发布:post_event,参数

    response.code.should eq "204"
  结尾
结尾

/*event(.:format)意味着它需要一个参数。

对自己和他人的特别说明:

如果您在 Rails 中遇到过路由错误,请验证您是否传递了所有参数。

于 2013-04-18T00:03:21.923 回答