0

次のコードを使用してカスタム パラメータ形式のサポートを追加することを示している Web サイトをいくつか見つけました。

ActionController::Base.param_parsers[Mime::PLIST] = lambda do |body|
  str = StringIO.new(body)
  plist = CFPropertyList::List.new({:data => str.string})
  CFPropertyList.native_types(plist.value)
end

ここにあるのは Apple plist フォーマット用で、これは私がやろうとしていることです。しかし、Rails 3.2.1param_parsersを使用すると、未定義であると言って開発サーバーが起動しません。3.xのドキュメントではなく2.xのドキュメントに実際に含まれているというだけで、非推奨になっているドキュメントや使用する代替品を見つけることができません。

Rails 3 で、POST および PUT リクエストでカスタム パラメータ形式をサポートする他の方法はありますか?

4

1 に答える 1

1

パラメータの解析は Rack ミドルウェアに移動しました。現在はActionDispatch の一部です

新しいパーサーを登録するには、次のようにミドルウェアの使用を再宣言できます。

MyRailsApp::Application.config.middleware.delete "ActionDispatch::ParamsParser"
MyRailsApp::Application.config.middleware.use(ActionDispatch::ParamsParser, {
  Mime::PLIST => lambda do |body|
    str = StringIO.new(body)
    plist = CFPropertyList::List.new({:data => str.string})
    CFPropertyList.native_types(plist.value)
  end
})

または、デフォルトのパーサーを含む定数を次のように変更できます

ActionDispatch::ParamsParser::DEFAULT_PARSERS[Mime::PLIST] = lambda do |body|
  str = StringIO.new(body)
  plist = CFPropertyList::List.new({:data => str.string})
  CFPropertyList.native_types(plist.value)
end

最初のバリアントは、おそらく最もクリーンです。ただし、ミドルウェア宣言を置き換える最後のものが優先されることに注意する必要があります。

于 2012-04-13T21:58:44.697 に答える