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」全体を削除するだけで機能するはずです (これが resources/index.json.rabl のコンテンツであり、コントローラーが @resources を設定している場合)。

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

rabl の代わりとしてhttps://github.com/rails-api/active_model_serializersを確認することをお勧めします。ユースケースを考えると、使いやすいかもしれません。

于 2013-03-29T00:12:30.643 に答える