Ruby on rails - 如何在没有 rabl 节点的情况下使用不同的模板进行收集"root"



我正在使用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 的替代品。鉴于您的用例,它可能更容易使用。

相关内容

  • 没有找到相关文章

最新更新