2013-01-23 69 views
3

我與Rabl的工作了一段時間,就在今天我面對,我無法解決得很好了一個有趣的問題..如何在沒有「根」節點使用不同的模板收集與Rabl的

所以,我有一個集合從GET返回 「... /表/ 512 /資源」 這裏是我用來返回(無根)我的樣本模板Rabl的:

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

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

但是,現在我意識到我要爲每個資源返回不同的模板,具體取決於它們的attr ibutes ..所以這很容易嗎?

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 

,但沒有成功,它將返回空對象,如=> [{},{},{}]。任何想法我怎麼能做到這一點?

回答

1

只是刪除整個「@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。鑑於您的使用情況,它可能更易於使用。

+0

是的,活動模型序列化器規則!自創建這個問題以來,我一直在使用它,並且因爲使用rabl而感到沮喪 – mateusmaso

相關問題