0

나는레일 JSON의 URL 인코딩은 구문 분석하지 않습니다 .json/.XML

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 

을 때 내 레일 컨트롤러가 위의 요청을 수신하면 URL 끝에있는 .json이 URL 인코딩/확장의 일부이며 hello의 일부가 아닌 것을 볼 수 없습니다. 다음과 같이 매개 변수를 확인합니다.

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

"text" => "hello" 대신에.

또한 AppsController에 respond_to :json이 있습니다.

왜 이런 일이 발생하는지 알고 싶습니다. 레일을 .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이 문제를 해결했습니다. @ H-man에 (.:format)이 추가 된 것 같습니다. 그러나 :format => true 설정 형식 http://guides.rubyonrails.org/v3.2.13/routing.html#route-globbing

    항상 제시하는 형식을 강제하고, :format => false은 거의 형식, 지금 일어나고있는 일입니다 무시 :

    또한이에 대한 참조입니다.

    내 정규식 /[^\/]+/과 관련된 문제는 /과 일치하는 모든 항목과 일치한다는 것을 깨달았습니다.