Joh*_*hir 2 ruby ruby-on-rails yajl
Rails 2.3.6开始使用快速新的json库yajl-ruby,"如果可用的话".
在yajl-ruby自述文件的"JSON gem Compatibility API"部分中,它概述了一种方法,可以放入yajl-ruby包含并让应用程序的其余部分无缝地获取它.
所以,理想情况下,我想
实现这一目标的最简单方法是什么?我猜:
config.gem 'yajl-ruby', :lib => 'yajl/json_gem'
Run Code Online (Sandbox Code Playgroud)
作为environment.rb中的第一个宝石.这样做不会导致任何错误,但我不知道如何知道rails是否正在为自己使用它.
谢谢!约翰
我建议yajl-ruby直接使用's API而不是JSON gem兼容API,主要是因为JSON gem的to_json方法与之相冲突ActiveSupport并且长期存在使它们协同工作的问题.
如果你只是这样做config.gem 'yajl-ruby', :lib => 'yajl',你将需要使用Yajl::Parser并Yajl::Encoder直接解析/编码对象.这样做的好处是你可以肯定不会与方法覆盖有任何冲突,因此,保证你的JSON编码/解析代码能够按预期工作.缺点是如果你使用任何使用JSON gem的gem,他们会继续这样做,但你自己的代码将使用yajl-ruby.
如果你愿意,你可以使用你的config.gem行,然后在初始化程序中,require 'yajl'这样你就可以加载两个API了.该yajl/json_gem包括将优先于使用JSON宝石与任何东西yajl-确保这将覆盖这些方法试图确保require 'yajl/json_gem'发生最后一次.
如果您使用的是Rails 3,则可以将其添加到初始化程序中:
ActionController::Renderers.add :json do |json, options|
  json = Yajl.dump(json) unless json.respond_to?(:to_str)
  json = "#{options[:callback]}(#{json})" unless options[:callback].blank?
  self.content_type ||= Mime::JSON
  self.response_body  = json
end
Run Code Online (Sandbox Code Playgroud)
确保render :json => ...使用电话yajl-ruby.
对不起,如果这不是真的回答你的问题,但我想至少给出yajl-ruby直接使用API 的建议:)
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           4097 次  |  
        
|   最近记录:  |