# ActiveResource e post method

**URL:** <https://www.ruby-forum.com/t/activeresource-e-post-method/147547>\
**Category:** IT\
**Created:** [September 3, 2008, 12:41am UTC](https://www.ruby-forum.com/t/activeresource-e-post-method/147547 "2008-09-03T00:41:24Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![reis](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/f1d935/32.png) [@reis](https://www.ruby-forum.com/u/reis)\
**Post date:** [September 3, 2008, 12:41am UTC](https://www.ruby-forum.com/t/activeresource-e-post-method/147547/1 "2008-09-03T00:41:24Z")

</div>

Ciao a tutti, in questi giorni sto usando un pochino ActiveResource e  
volevo  
fare dei test, ma purtroppo ci giro attorno senza una soluzione.  
Premetto che i test che lavorano su GET, PUT e DELETE funzionano, anche  
se  
le soluzioni a volte non sono proprio pulite, mentre per il POST non c’è  
modo.

Ecco quanto fatto. Prima di tutto creo il Mock. In pratica quando mi  
trova  
una chiamata con il verbo POST e con l’URI specificata, allora mi  
ritorna il  
contenuto di @variable (in XML) e la risposta 201, simultando una  
chiamata  
al web service. Fin qui tutto bene.

ActiveResource::HttpMock.respond\_to do |mock|  
mock.post  
“/locations/buildings.xml?description=new-description&name=new-name”,  
{},  
@variable, 201  
…  
end

Ora il problema è che il seguente metodo, quello che uso per creare le mie  
risorse, non mi combacia in quanto non manda le informazioni tramite  
URI, ma  
trasforma la query string in XML ed invia il contenuto nel body della  
request. Ecco un esempio per chiarire il tutto.

# creazione di una nuova risorsa

Building.new({“name”=\>“new-name”,  
“description”=\>“new-description”}).save

Giustamente, mi dice che non trova il mockup perchè l’URI non coincide.  
Questo succedere perchè il metodo save crea sì una chiamata con il verbo  
POST all’URI /locations/buildings.xml, ma trasforma la query string in  
un  
flusso XML, come si può vedere dal messaggio di errore dei test.

ActiveResource::InvalidRequestError: No response recorded for \<POST:  
/locations/buildings.xml [Content-Typeapplication/xml]  
(\<?xml version="1.0" encoding="UTF-8"?\>  
  
new-homenew-description  
)\>

Ora, da quel che ho visto non c’è il modo per aggiungere un body al  
mockup,  
quindi la soluzione era la possibilità di usare i costum methods che  
ActiveResource mette a disposizione. In questo caso la query string non  
è  
codificata in XML.

Building.post(:_name_, {“name”=\>“new-home”,  
“description”=\>“new-description”})

Purtroppo, il problema qui sta nel fatto che come primo parametro  
bisogna  
specificare il nome del metodo che verrà attaccato al path dell’URI.  
Possiamo quindi creare qualcosa come /locations/buildings/_name_?..  
Nel  
mio caso, siccome non mi interessa l’uso di name, ho provato a mettere  
nil o  
“”, ma mi modifica comunque l’URI path quel che basta per non fare  
trovare  
il mock. Ad esempio, pur mettendo nil, mi trovo qul cavolo di slash in  
più.  
Building.post(_nil_, {“name”=\>“new-home”,  
“description”=\>“new-description”})  
/locations/buildings\*/\*.xml?description=new-description&name=new-name

# 

lo slash non permette il matching

Scusate per il lungo messaggio 😉

–  
Andrea R., [http://mikamai.com](http://mikamai.com)  
Writing [http://sensejs.wordpress.com/](http://sensejs.wordpress.com/)  
Collaborating [http://therubymine.it](http://therubymine.it)  
Reading [http://stacktrace.it](http://stacktrace.it)

---

<div class="post-metadata">

**Author:** ![reis](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/f1d935/32.png) [@reis](https://www.ruby-forum.com/u/reis)\
**Post date:** [September 3, 2008, 1:47pm UTC](https://www.ruby-forum.com/t/activeresource-e-post-method/147547/2 "2008-09-03T13:47:08Z")

</div>

Ciao Andrea,  
Guarda ai test di questo mio plugin, potrebbero esserti d’aiuto.

> **[GitHub - jodosha/acts-as-resource: ActsAsResource combines ActiveRecord and...](https://github.com/jodosha/acts-as-resource)**
>
> ActsAsResource combines ActiveRecord and ActiveResource features in \*one\* class. - GitHub - jodosha/acts-as-resource: ActsAsResource combines ActiveRecord and ActiveResource features in \*one\* class.

## -luca

blog: [www.lucaguidi.com](http://www.lucaguidi.com)  
Pro-Netics: [www.pro-netics.com](http://www.pro-netics.com)  
Sourcesense - making sense of Open Source: [www.sourcesense.com](http://www.sourcesense.com)

---

<div class="post-metadata">

**Author:** ![reis](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/f1d935/32.png) [@reis](https://www.ruby-forum.com/u/reis)\
**Post date:** [September 3, 2008, 6:35pm UTC](https://www.ruby-forum.com/t/activeresource-e-post-method/147547/3 "2008-09-03T18:35:55Z")

</div>

On Wed, Sep 3, 2008 at 1:46 PM, Luca G. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Ciao Andrea,  
> Guarda ai test di questo mio plugin, potrebbero esserti d’aiuto.  
> [GitHub - jodosha/acts-as-resource: ActsAsResource combines ActiveRecord and ActiveResource features in \*one\* class.](http://github.com/jodosha/acts-as-resource)
> 
> ## -luca
> 
> blog: [www.lucaguidi.com](http://www.lucaguidi.com)  
> Pro-Netics: [www.pro-netics.com](http://www.pro-netics.com)  
> Sourcesense - making sense of Open Source: [www.sourcesense.com](http://www.sourcesense.com)

Grazie Luca, c’ho dato un’occhiata ma non ho trovato una soluzione.  
Ieri mi sono anche guardato i test di ActiveResource, ma niente da fare  
🙂

Buona continuazione a Berlin!
