2014-02-21 81 views
0

我有以下的軌道路線Rails的JSON的URL編碼不解析以.json/.XML

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

end 

擊中它JSON格式的網址如下:

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

當我的軌控制器收到上述請求後,它看不到url的末尾的.json是url編碼/擴展的一部分,而不是hello的一部分。它看到的參數如下:

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

而不是"text" => "hello"

我的AppsController中也有respond_to :json

任何想法爲什麼發生這種情況?以及如何讓rails解析.json

回答

1

兩件事情:

  • 你沒有包括在你的路線格式部分,即:/path/to(.:format)
  • 我真的不知道您正則表達式做什麼,但你可能要檢討它

我嘗試以下,似乎很好地工作:

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

end 
+0

所以我的文本可以有任何。或 - 或其中的任何其他角色。 (。:格式)對我不起作用,但是感謝我指出:format,我在我的路線中做了':format => true',它完成了這項工作。謝謝! – Matilda

0

土井ng :format => true在路線中爲我解決了這個問題。看起來像添加(.:format)爲@ H-man工作。

而且這是爲參考:格式http://guides.rubyonrails.org/v3.2.13/routing.html#route-globbing

但是設置:format => true強制格式總是被提出,並:format => false幾乎忽略格式,這是現在發生了什麼。

我意識到這個問題是與我的正則表達式/[^\/]+/匹配除了匹配.json的/之外的所有內容。