Я разрабатываю веб-сервис 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