gpt4 book ai didi

ruby-on-rails - 在我的 Rails 项目中使用 yajl-ruby 的最佳方式是什么?

转载 作者:数据小太阳 更新时间:2023-10-29 08:21:40 26 4
gpt4 key购买 nike

Rails 2.3.6 开始使用快速的新 json 库,yajl-ruby , "if available" .

在 yajl-ruby 自述文件的“JSON gem Compatibility API”部分中,它概述了一种方法,只需删除 yajl-ruby 包含并让应用程序的其余部分无缝地拾取它。

所以,理想情况下,我想

  1. Rails 使用它
  2. 我的 gem 要使用它
  3. 我的应用程序代码来使用它

实现此目标的最简单方法是什么?我的猜测:

config.gem 'yajl-ruby', :lib => 'yajl/json_gem'

作为 environment.rb 中的第一个 gem。这样做不会导致任何错误,但我不确定如何知道 Rails 是否将其拾取供自己使用。

谢谢!约翰

最佳答案

我建议使用 yajl-ruby的 API 而不是 JSON gem 兼容 API 主要是因为 JSON gem 的 to_json方法与 ActiveSupport 冲突并且在让他们一起工作时遇到了长期存在的问题。

如果你只是做 config.gem 'yajl-ruby', :lib => 'yajl'相反,您需要使用 Yajl::ParserYajl::Encoder直接解析/编码对象。这样做的好处是您可以确定不会与方法覆盖发生任何冲突,因此可以保证您的 JSON 编码/解析代码将按预期工作。缺点是如果您使用任何使用 JSON gem 的 gem,它们将继续这样做,但您自己的代码将使用 yajl-ruby。

如果你愿意,你可以使用你的 config.gem 行,然后在初始化器中 require 'yajl'所以你会加载两个 API。 yajl/json_gem include 将覆盖任何使用 JSON gem 的 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

确保render :json => ...来电使用 yajl-ruby

抱歉,如果这不能真正回答您的问题,但我想至少给出使用 yajl-ruby 的建议。直接的 API :)

关于ruby-on-rails - 在我的 Rails 项目中使用 yajl-ruby 的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3073711/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com