iPhone 응용 프로그램에서 json을 통해 레일 백엔드에 사용자 acount를 만들려고합니다. 다음은 현재 서버에 게시되는 내용이다 :iOS에서 Rails 3.1로 JSON 게시 (Stringify_keys 오류)
Parameters: {"utf8"=>"✓", "authenticity_token"=>"H2iYdzdfokQs91AAozb+taMTdV2y5xLRaCni5XKQN4w=", "patient"=>{"email"=>"test", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Create Patient"}
을 내가 다른 곳 stringify_keys를 읽은 내용에서 그 의미 : 브라우저에서 바로 게시함으로써
Started POST "/patients" for 127.0.0.1 at 2011-11-27 20:52:29 -0800
Processing by PatientsController#create as HTML
Parameters: {"patient"=>"{\"password\":\"password\",\"password_confirmation\":\"password\",\"email\":\"testagain\"}"}
WARNING: Can't verify CSRF token authenticity
Completed 500 Internal Server Error in 1ms
NoMethodError (undefined method `stringify_keys' for #<String:0x00000104a354f8>):
app/controllers/patients_controller.rb:43:in `new'
app/controllers/patients_controller.rb:43:in `create'
이 제출하는 PARAMATERS은 나는 새 사용자를 만들려면이 코드를 사용하고 있기 때문에 조치는 (내가 거의 재구성 생각하는) 해시를 기대 : 나는 또한 생각
@patient = Patient.new(params[:patient])
그 진위 토큰 JSON 형식을 사용하여 게시하는 경우 중요하지 않습니다 ... 중요합니까?
전체 질문 : 아이폰 앱에서 레일 백엔드에 게시하는 것이 올바른 방법입니까? 매개 변수 해시를 다시 만드시겠습니까? 올바른 방향으로 조금 움직여 주시면 감사하겠습니다.
NSDictionary *json = [self createSignUpDictionary];
NSURL *url = [NSURL URLWithString:@"http://localhost:3000/patients"];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request addRequestHeader:@"Content-Type" value:@"application/json"];
[request addRequestHeader:@"Accepts" value:@"application/json"];
[request setPostValue:[json JSONString] forKey:@"patient"];
[request startAsynchronous];
이것은 내 문제를 해결하지 못했지만, 해결해야 할 또 다른 문제였습니다. 그래서 그것을 표시 할 것입니다. 이 문제는 JSON 헤더를 설정 했음에도 불구하고 HTML로 처리 중임을 알리는 것으로이 문제를 해결했습니다. 게시물 요청에 ".json"을 첨부하면이 문제가 해결되었습니다. – Msencenb
이전 답변이 아니기 때문에 별도로 답변을 게시하고 동의합니다. 사실 맞아. –