Невозможно сериализовать вложенные активные ресурсы - PullRequest
0 голосов
/ 20 января 2012

Я разрабатываю веб-сервис RESTful, который использует другой веб-сервис RESTful (Proxmox Virtual Environment 2) через ActiveResource.

PVE 2 имеет сильно вложенные ресурсы. В настоящее время я пытаюсь интегрировать хранилища PVE и их содержимое в мое приложение.

Структура ресурсов PVE можно увидеть на http://pve.proxmox.com/pve2-api-doc/.

В PVE 2 узел содержит хранилища, а хранилища имеют содержимое (например, ISO-образы DVD). Вот мои активные ресурсы:

node.rb:

class Node < ActiveProxmoxResource
  self.site = "https://127.0.0.1:8006/api2/json/"
  attr_accessor :headers

  def storages(scope = :all)
    storages =
      Storage.find(scope, :params => {:node_name => @attributes['name']})
    return storages
  end
end

storage_content.rb:

class StorageContent < ActiveProxmoxResource
  self.site = "https://127.0.0.1:8006/api2/json/nodes/:node_name/storage/:storage_name"
  self.element_name = "content"
  self.collection_name = "content"

  def storage
    storages = Storage.find(self.prefix_options[:storage_name])
    return storages
  end
end

storage.rb:

class Storage < ActiveProxmoxResource
  self.site = "https://127.0.0.1:8006/api2/json/nodes/:node_name"
  self.element_name = "storage"
  self.collection_name = "storage"
  attr_accessor :headers

  def storage_contents(scope = :all)
    storage_contents =
      StorageContent.find(scope, :params => {
      :node_name => self.prefix_options[:node_name],
      :storage_name => @attributes['storage']
    })
    return storage_contents
  end

  def node
    nodes = Node.find(self.prefix_options[:node_name])
    return nodes
  end
end

Я не могу сериализовать экземпляры StorageContent. Он отлично работает для экземпляров хранилища. Вот сообщение об ошибке:

ArgumentError (слишком мало аргументов): app / controllers / storage_contents_controller.rb: 15: в index' app/controllers/storage_contents_controller.rb:14:in index '

Контроллер выглядит так:

class StorageContentsController < ApplicationController
  def index
    nodes = Node.find(:all)
    contents = []

    nodes.each do |n|
      n.storages.each do |s|
        s.storage_contents.each do |c|
          contents << c
        end
      end
    end

    respond_to do |format| # line 14
      format.xml {render :xml => contents} # line 15
    end
  end
end

Я борюсь с этой проблемой уже несколько часов и до сих пор не могу понять, что я делаю неправильно (по крайней мере, то, что я делаю действительно неправильно). Немного помощи было бы очень приятно, пожалуйста! :)

Antoine

PS: Я надеюсь, что я не делал слишком много английских ошибок, потому что я не владею английским языком. : S

...