0

я маршрут следующих рельсыRails JSON URL кодирование не анализирует .json/.xml

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

end 

URL-адрес, который бьет его в формате JSON является следующим:

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

Когда мои рельсы контроллер получает запрос выше, он не может видеть, что .json в конце URL-адреса является частью кодирования/расширения URL-адреса, а не частью приветствия. Он видит Params как следующие:

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

вместо того, чтобы "text" => "hello".

У меня также есть respond_to :json в моем приложении AppsController.

Любая идея, почему это происходит? и как сделать рельсы разобрать .json?

ответ

1

две вещи:

  • Вы не включили формат участия в маршруте, то есть: /path/to(.:format)
  • Я не совсем уверен, что делает ваше регулярное выражение, но вы можете просмотреть его

Я попытался следующие, и это, кажется, работает нормально:

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

end 
+0

Так что мой текст может иметь любой. или - или любой другой символ в нем. формат (.:) не работал для меня, но спасибо, что указал мне: формат, я сделал ': 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.

Смежные вопросы