3

我和 Rabl 一起工作了一段时间,就在今天,我遇到了一个我无法很好解决的有趣问题。

所以,我有一个从 GET ".../list/512/resources" 返回的集合,这是我用来返回的示例 rabl 模板(没有根):

collection @resources
extends "api/v1/resources/_base"

=> { [ {...}, {...}, {...} ] }

但是,现在我意识到我想根据每个资源的属性为每个资源返回不同的模板......所以这很容易对吧?

node @resources => :resources do |resource|
  if resource.type == 'Document'
    partial('...', :object => resource)
  elsif @resource.type == 'Folder'
    partial('...', :object => resource)
  end
end

=> {资源:[{...},{...},{...}]}

但是哦!现在我不想要那个“资源”节点了..应该怎么做?我试过类似的东西:

array = []

@resources.each do |resource|
  if resource.type == 'Document'
    array << partial('...', :object => resource)
  elsif @resource.type == 'Folder'
    array << partial('...', :object => resource)
  end
end

collection array

但没有成功,它返回空对象,例如 => [ {}, {}, {} ]。知道我该怎么做吗?

4

1 回答 1

1

只需删除整个“@resources => :resources”即可

node do |resource|
  if resource.type == 'Document'
    partial('...', :object => resource)
  elsif @resource.type == 'Folder'
    partial('...', :object => resource)
  end
end

您可能需要检查https://github.com/rails-api/active_model_serializers作为 rabl 的替代品。鉴于您的用例,它可能更容易使用。

于 2013-03-29T00:12:30.643 回答