2009-09-08 8 views
1

J'ai plusieurs modèles ActiveResource dans mon projet. Il y avait tellement étrange quand j'ai appelé to_xml sur mon ActiveResource. Les options que j'ai passées à to_xml aiment: only et: except ne fonctionne pas du tout. Sur ActiveRecord, ça marche vraiment bien. Quelqu'un sait?Pourquoi to_xml sur ActiveResource ne fonctionne pas correctement?

class Node < ActiveResource::Base 
    self.site = NODE_SERVER 
end 

# node has uuid, name, type attributes 
node = Node.find("3333") 
node.to_xml(:only => [:uuid]) 

# after here, i still get all attributes 
+0

Veuillez formater votre code ... – Lichtamberg

+0

to_xml renvoie une chaîne XML ... que faites-vous avec le résultat? – jonnii

+0

Je vais le renvoyer au client. – Chamnap

Répondre

1

L'implémentation de ActiveResource :: Base # à_xml est différente de ActiveRecord :: Base.

Voir http://api.rubyonrails.org/classes/ActiveResource/Base.html#M000914

ActiveResource :: Base # to_xml accepte uniquement :indent, :dasherize, :camelize and :skip_instruct.

+0

Je ne pense pas que la mise en œuvre soit différente. De mon point de vue, il appellerait simplement attributes.to_xml (qui est un objet de hachage) d'un objet activeesource. De plus, to_xml est fourni avec ActiveSupport. Si vous essayez d'appeler to_xml sur un hachage, vous verrez, cela ne fonctionne pas non plus. – Chamnap

+0

Non, la mise en œuvre est différente. ARecord :: Base.to_xml utilise XmlSerializer, alors que AResource :: Base.to_xml utilise une méthode de sérialisation complètement différente. De plus, les deux implémentations acceptent différentes options, comme indiqué dans la documentation de l'API Rails. En d'autres termes, RTFM :). – bartzon

+0

Vous avez raison. Je viens de regarder le code hier. – Chamnap

0

Vous dites "après ici, j'ai toujours tous les attributs". On dirait que vous pensez node.to_xml va changer le node lui-même, mais ce n'est pas le cas. Vous devez faire

xml = node.to_xml(:only => [:uuid]) 

et puis se référer à xml.

+0

no. Je veux dire que le to_xml renvoie toujours tous les attributs. Avez-vous déjà essayé? – Chamnap

1

Les méthodes to_xml sur ActiveRecord et ActiveResource sont mises en œuvre indépendantes. Cela signifie que vous ne pouvez pas vous attendre à ce qu'ils se comportent exactement de la même façon ou qu'ils prennent les mêmes arguments.