2012-02-03 3 views
18

JSON 양식 ({:name => "hello"})과 같은 JSON을 레일즈 3 컨트롤러 ExampleController에 게시하고 있습니다.Rails 3 params unwanted wrapping

대신 같은 params을 얻는 :

어떤 생각을

{:name => "hello", :controller => "example", :action => "index", :example => {:name => "hello"} 

(예 JSON 데이터가 두 번 표시와 행동과 컨트롤러가 추가됩니다!) :

{:name => "hello"} 

나는군요 왜 ? 쉽게 클라이언트가 모델을 패키징 할 필요가 없습니다 의미 Example.create 또는 @example.update_attributes로 매개 변수를 전달할 수 있도록

+0

여기서 쓴대로 content-accept 및 Accepts 헤더를 설정하고 있습니까? http://stackoverflow.com/questions/4914745/post-json-to-rails-server –

+0

예 - jQuery $ .ajax에서 게시 : 유형 : json – Blacksad

답변

34

ActionController는 자동으로 JSON 요청에 대해이 작업을 수행 - 그냥 name 등을 포함 할 수 있습니다. al. JSON 데이터의 최상위 레벨에서 컨트롤러가 그룹화를 처리합니다.

@example = Example.create params[:example] 

매개 변수 포장 코드는 컨트롤러의 이름에서 해당 모델의 이름을 가져옵니다,하지만 당신은 컨트롤러의 wrap_parameters 매크로를 사용하여 변경할 수 있습니다

wrap_parameters :thing 

또는

와 그것을 해제
wrap_parameters false 

모델에서 attr_accessible을 사용하는 경우 매개 변수 래핑 기능은 대용량 파일에 액세스 할 수없는 매개 변수도 제외합니다 점화. 원하는 경우이 매크로를 사용하여 JSON 이외의 다른 내용 유형에 적용 할 수 있습니다.

기본적으로 새로 생성 된 Rails 앱에서는 이니셜 라이저를 사용하는 모든 컨트롤러에 대해 구성됩니다. config/initializers/wrap_parameters.rb을 찾으십시오.