我正在使用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
=> { resources: [
{...}, {...}, {...} ] }但是哦!现在我不希望那里有那个"资源"节点。应该怎么做?我尝试了类似的东西:
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
但没有成功,它返回空对象,如 => [ {}, {}, {} ]。知道我该怎么做吗?
只需删除整个"@resources => :resources",这应该可以工作(前提是这是resources/index.json.rabl的内容并且您的控制器设置为@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 的替代品。鉴于您的用例,它可能更容易使用。