2012-02-03 8 views
18

JSON形式の{:name => "hello"}のようなJSONをRails 3コントローラのExampleControllerに投稿しています。Rails 3 params unwanted wrapping

代わりのようparamsを取得:

{:name => "hello"} 

私が取得しています:

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

(はいJSONデータが二回表示され、アクションやコントローラが追加されます!)

任意のアイデアどうして ?それだけでnameらを含めることができます - あなたは簡単にクライアントがあなたのモデルのためにそれらをパッケージ化する必要がありませんを意味し、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要求のためにこれを行います。 al。 JSONデータの最上位にあり、コントローラがグループ化を処理します。

@example = Example.create params[:example] 

パラメータラッピングコードは、コントローラの名前からモデルの名前を取得しますが、あなたはあなたのコントローラでwrap_parametersマクロを使用して、それを変更することができます。

wrap_parameters :thing 

それとも

でそれをオフにします
wrap_parameters false 

モデルでattr_accessibleを使用している場合、パラメータラッピング機能では大量尻にアクセスできないパラメータも除外されます点火する。必要に応じて、このラッピング機能をJSON以外の他のコンテンツタイプにも適用できるようにマクロを使用することもできます。

新しく作成されたRailsアプリケーションでは、これは初期設定を使用するすべてのコントローラに対してデフォルトで設定されています。 config/initializers/wrap_parameters.rbを探します。