0

我有以下铁路路线

resources :apps do
  post "name/:text/,
     :on => :member, :action => :register, :as => :register,
     :text => /[^\/]+/

end

以 json 格式点击它的 url 如下:

curl -v -s -H "Content-type: application/json" -d '' -X POST http://0.0.0.0:3000/apps/1/name/hello.json

当我的 rails 控制器收到上面的请求时,它看不到.jsonurl 末尾的 url 编码/扩展的一部分,而不是 hello 的一部分。它看到的参数如下:

Parameters: {"id"=>"1", "text"=>"hello.json"}

而不是拥有"text" => "hello".

我的 AppsController 中也有respond_to :json

知道为什么会这样吗?以及如何让rails解析.json出来?

4

2 回答 2

1

两件事情:

  • 您没有在路线中包含格式部分,即:/path/to(.:format)
  • 我不太确定您的正则表达式是做什么的,但您可能想查看它

我尝试了以下方法,它似乎工作正常:

resources :apps do
  post "name/:text(.:format)",
     :on => :member, :action => :register, :as => :register,
     :text => /[a-z]+/

end
于 2014-02-21T20:26:47.630 回答
0

在路线:format => true上做为我解决了这个问题。看起来添加(.:format)对@H-man 有效。

这也是 :format http://guides.rubyonrails.org/v3.2.13/routing.html#route-globbing的参考

但是,设置:format => true会强制始终呈现格式,并且:format => false几乎忽略了格式,这就是现在正在发生的事情。

我意识到问题出在我的正则表达式/[^\/]+/匹配除了/匹配 .json 之外的所有内容。

于 2014-02-21T21:37:27.233 回答