2009-10-26 29 views
0

我有一個處理XML請求的創建操作。我沒有使用內置的params散列,而是使用Nokogiri根據XML模式驗證XML。如果此驗證通過,則會存儲原始XML以供以後處理。每個操作禁用/自定義params_parser

據我瞭解,在分析XML兩次:一是Rails的創建params哈希表,然後引入nokogiri解析發生。我一直在尋找方法來禁用params解析來加快速度,但一無所獲。

ActionController::Base.param_parsers[Mime::XML] = lambda do |body| 
    # something 
end 

我知道這是可以自定義XML PARAMS使用類似上述的一般分析,但是我依賴於其他控制器的默認行爲。

是否有可能在每個操作的基礎上繞過PARAMS解析?我有什麼選擇?

謝謝你的幫助!

回答

2

我設法解決了使用Rails Metal的問題。相關部分看起來像這樣:

class ReportMetal 
    def self.call(env) 
    if env["PATH_INFO"] =~ /^\/reports/ 
     request = Rack::Request.new(env) 
     if request.post? 
     report = Report.new(:raw_xml => request.body.string) 
     if report.save # this triggers the nokogiri validation on raw_xml 
      return [201, { 'Content-Type' => 'application/xml' }, report.to_xml] 
     else 
      return [422, { 'Content-Type' => 'application/xml' }, report.errors.to_xml] 
     end 
     end 
    end 
    [404, { "Content-Type" => "text/html" }, "Not Found."] 
    ensure 
    ActiveRecord::Base.clear_active_connections! 
    end 
end 

謝謝!

PS:天真的標杆與發展的Apache臺顯示每秒22.62請求標準的Rails與每秒57.60請求對金屬版本。

+0

這看起來像我需要:)謝謝! – 2009-11-17 11:19:10

+0

已確認 - 有效 - 再次感謝! – 2009-11-19 00:46:29