【问题标题】:How to use JBuilder outside of Rails app?如何在 Rails 应用程序之外使用 JBuilder?
【发布时间】:2012-05-16 16:27:50
【问题描述】:

我喜欢 JBuilder 的语法,并希望在 Rails 之外使用它。我有一个类和一个 to_json 方法:

class Blog

  def to_json
    Jbuilder.encode do |json|
      json.(self, :id, :logo)

      json.articles articles do |json, article|
        json.id article.id
      end
    end
  end

end

不幸的是,我得到了:

/Users/justin/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/jbuilder-0.4.0/lib/jbuilder.rb:13:in `define_method': wrong argument type NilClass (expected Proc/Method) (TypeError)
  from /Users/justin/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/jbuilder-0.4.0/lib/jbuilder.rb:13:in `<class:Jbuilder>'
  from /Users/justin/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/jbuilder-0.4.0/lib/jbuilder.rb:7:in `<top (required)>'

对应于:

# jbuilder.rb
class Jbuilder < BlankSlate
  # Yields a builder and automatically turns the result into a JSON string
  def self.encode
    new._tap { |jbuilder| yield jbuilder }.target!
  end

  define_method(:__class__, find_hidden_method(:class))   # <--- exception
  define_method(:_tap, find_hidden_method(:tap))
  # .... 

知道我需要 gem 中的哪些 gem 来满足 JBuilder 吗?

【问题讨论】:

  • 您可以使用rubygems.org/gems/jbuilder。在代码顶部包含 require 'rubygems' 和 require 'jbuilder'
  • 从一个没有其他依赖项的新 gem 开始,这有效。认为这可能是由于尝试使用主动记录模型,将重构并看看它是如何进行的。谢谢沙密斯。

标签: ruby-on-rails json gem jbuilder


【解决方案1】:

你可以使用

template = File.read(template_file)
output = Jbuilder.encode { |json| eval template }

【讨论】:

    猜你喜欢
    • 2014-10-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 2014-08-07
    相关资源
    最近更新 更多