如何在铁轨上使用小胡子和红宝石的兔子

时间:2012-10-24 13:27:56

标签: ruby-on-rails-3.2 mustache rabl

我正在使用ruby 1.9.3p125和rails 3.2.8并且今天将rabl添加到我的gemfile中,所以它应该是最新的。

我在一个简单的情况下使用了RABL,我希望将json直接发送给请求者。现在我有一种情况,我想用rabl生成json,然后用胡子渲染它。

在此之前我一直在使用as_json(在模型中重写)来生成json,因此:

 <%= render 'scrollable', :mustache=>{photos: @page.photos.as_json} %>

在_scrollable.html.mustache中有一个合适的模板,我仍然希望使用它。

我为这些照片编写了RABL模板:

# _photo.json.rabl
object @photo do
  attributes :src, :name, :height
  attributes :drawing

  node do |p|
    { :label => p.caption || p.name }
  end

  child :components do
    attributes :name, :height
  end

end

# _photos.json.rabl
collection @photos do
  extend 'photos/photo'
end

如何调用这些模板?

  <%= render 'scrollable', :mustache =>render(@page.photos, template: 'photos', formats: '[json]', handlers: ['rabl'])  %>

返回
Missing partial ..../photos/photo with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee, :mustache, :rabl]}

这很有趣,似乎已经失去了我想要格式的事实:json

1 个答案:

答案 0 :(得分:4)

我正在做类似的事情,但直接调用Rabl渲染器并询问它是否为哈希而不是json字符串,然后将其用作胡须数据...

render 'posts.mustache', :mustache=>Rabl::Renderer.new('posts.rabl', @posts, :view_path => 'app/views', :format => 'hash').render

我认为小胡子期待一个对象不是一个字符串。