2012-04-13 7 views
0

私はいくつかのウェブサイトは、カスタムパラメータ形式のサポートを追加するために、次のコードを使用してを指して発見した:ActionController :: Base.param_parsers代替

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 

ここにこの1つは何私であるアップルのplist形式のためのものですお探しですか?ただし、Rails 3.2.1を使用すると、param_parsersが定義されていないと、devサーバーは起動しません。私はそれが廃止されているか、または何らかの代替手段として使用されていることを知るために縫い合わせることはできません。実際には、xドキュメントではなく3.xドキュメントに含まれています。

POSTおよびPUTリクエストでカスタムパラメータフォーマットをサポートする他の方法はありますか?

答えて

1

paramsの解析がRackミドルウェアに移行しました。今はpart of 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 

第一の変形例のように、デフォルトのパーサを含む定数を変更することができますおそらく最もクリーンです。しかし、ミドルウェア宣言に取って代わる最後のものが勝つことに気づく必要があります。